从另一个方法调用EventHandler

时间:2011-09-21 13:53:31

标签: c# .net

如何从页面后面相同代码的其他方法调用以下方法?

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();我怎么把它放在括号内?

7 个答案:

答案 0 :(得分:6)

由于您没有直接引用sender,并且您没有正确使用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();
}

答案 1 :(得分:3)

将验证逻辑提取到另一个方法

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()

答案 2 :(得分:1)

像这样的东西可以起作用......

    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;
}

答案 3 :(得分:1)

尝试打破另一种方法:

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();
    }

同样在你的另一种方法中,不管是什么。

答案 4 :(得分:1)

为(对象发送者,ServerValidateEventArgs args)位放这个:(这个,新的EventArgs())

答案 5 :(得分:0)

由于您的代码实际上并未使用sender参数,因此您只需传入null即可。至于ServerValidateEventArgs你可以新建它,没有什么神奇的。

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

答案 6 :(得分:0)

您所指的方法是一个事件,需要通过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