从另一个方法中调用事件处理程序

4
如何在同一代码页面的另一个方法中调用以下方法?
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();,那么我应该在括号里放什么呢?


从其他方法调用事件处理程序非常奇怪...你想做什么? - Paolo Tedesco
@Paolo Tedesco 我有一组在提交时被调用的自定义验证器。然而,表单有一种方法可以将地址详细信息从一个部分复制到另一个部分,并且为了完整起见,在那个时候调用自定义验证器是理想的。我可以将所有验证复制到复制事件中,但这会复制代码,这不是好事!我是 .net 方面的新手,对于采取什么最佳行动还有点模糊。 - ComfortablyNumb
7个回答

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

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()函数。

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

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

同样地,在你的其他方法中也是如此,无论那是什么。


1

将以下内容放入 (object sender, ServerValidateEventArgs args) 位置:(this, new EventArgs())


0

由于您的代码实际上并未使用sender参数,因此可以简单地传入null。至于ServerValidateEventArgs,您可以直接新建它,没有什么魔法。

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接