簡體   English   中英

從另一個方法調用EventHandler

[英]Call an EventHandler from another Method

如何在頁面后面的相同代碼上從另一個方法調用以下方法?

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args)
    {
        bool is_valid = txtDeliveryLastName.Text != "";
        txtDeliveryLastName.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink;
        args.IsValid = is_valid;
    }

我不知道如何處理(object sender, ServerValidateEventArgs args)位。 我調用CustomValidatorDelLN_ServerValidate(); 我怎么把它放在括號內?

由於您沒有直接引用sender ,並且您沒有正確使用ServerValidateEventArgs ,因此您可以ServerValidateEventArgs一下:

var args = new ServerValidateEventArgs(String.Empty, false);
CustomValidatorDelLN_ServerValidate(null, args);

我不會這樣做。 我會建議一個重構器。 從其他代碼調用事件處理程序真的沒有意義。 您可以輕松地提取驗證邏輯並將其放在單獨的方法中。 然后,您可以在代碼中的兩個位置使用該新方法:

// You can call this method from both places
protected bool ValidateLastName()
{
    bool isValid = !String.IsNullOrWhiteSpace(txtDeliveryLastName.Text);
    txtDeliveryLastName.BackColor = isValid ? Color.White : Color.LightPink;
    return isValid;
}

// This would be the modified Event Handler
protected void CustomValidatorDelLN_ServerValidate(object sender,
    ServerValidateEventArgs args)
{
    args.IsValid = ValidateLastName();
}

將該驗證邏輯提取到另一個方法

public bool CheckValidity()
{
        bool is_valid = txtDeliveryLastName.Text != "";
        txtDeliveryLastName.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink;
        return is_valid;
}

並使用它

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args)
    {
        args.IsValid = CheckValidity();
    }

現在從任何地方調用CheckValidity()

對於(對象發送者,ServerValidateEventArgs args)位放這個:(這個,新的EventArgs())

像這樣的東西可以工作......

    protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args)
    {

        args.IsValid = isValid();
    }


protected bool isValid()
{

    bool is_valid = txtDeliveryLastName.Text != "";
        txtDeliveryLastName.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink;
    return is_valid;
}

嘗試打破另一種方法:

private bool ValidateDeliveryLastName()
    {
        bool is_valid = txtDeliveryLastName.Text != "";
        txtDeliveryLastName.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink;
        return is_valid;
    }

然后使用電話

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args)
    {
        args.IsValid = ValidateDeliveryLastName();
    }

同樣在你的另一種方法中,無論可能是什么。

由於您的代碼實際上並未使用sender參數,因此您只需傳入null即可。 至於ServerValidateEventArgs你可以新建它,沒有魔力。

CustomValidatorDelLN_ServerValidate(null, new ServerValidateEventArgs(String.Empty, false));

您所指的方法是一個事件,它需要通過html或頁面事件連接到驗證器。 例:

<asp:CustomValidator OnServerValidate="CustomValidatorDelLN_ServerValidate" />

要么

protected void Page_Load(object sender, EventArgs e)
{
    CustomValidatorDelLN.ServerValidate += CustomValidatorDelLN_ServerValidate;
}

參考: http//msdn.microsoft.com/en-us/library/system.web.ui.mobilecontrols.customvalidator.servervalidate.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM