将控件传递给方法

时间:2011-09-23 14:37:52

标签: c# asp.net validation methods

我正在尝试创建一个自定义验证传递给它的TextBox控件的方法。

这是我到目前为止所得到的:

自定义验证器

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args)
    {
        CustomValidator ThisValidator = sender as CustomValidator;
        TextBox MyBox = FindControl(ThisValidator.ControlToValidate) as TextBox;

        args.IsValid = isValid(MyBox);
    }

验证方法

protected bool isValid(System.Web.UI.WebControls.TextBox MyBox)
    {
        bool is_valid = MyBox.Text != "";
        MyBox.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink;
        return is_valid;
    }

代码编译正常,但我得到了

  

NullReferenceException未被用户代码

处理

bool is_valid = MyBox.Text != "";

当我运行验证时。

我知道我很亲近(我认为我是)但是我哪里错了?

4 个答案:

答案 0 :(得分:1)

首先需要在转换后检查对象本身是否存在:

bool is_valid = MyBox != null;

然后你可以检查它的文本属性

答案 1 :(得分:1)

您的问题是FindControl()方法不是递归的,因此MyBox为空。如果您希望它正常工作,您必须编写递归FindControl()方法,如here

您可能还想检查MyBox是否为空,如果是,则返回方法。

答案 2 :(得分:0)

为了完整性,这段代码为我做了诀窍:

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

    protected bool isValid(System.Web.UI.WebControls.TextBox MyBox)
    {
        bool is_valid = MyBox.Text != "";
        MyBox.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink;
        return is_valid;
    }

答案 3 :(得分:-4)

您正在尝试验证空文本框。您无法验证空字符串。