RequiredFieldValidator控件中的错误

时间:2015-09-09 13:09:15

标签: c# asp.net requiredfieldvalidator

.aspx file:

邮政编码:

<asp:TextBox runat="server" ID="txtPostalCode" CssClass="inputs" /><br />
 <asp:RegularExpressionValidator ID="regPostalCode" runat="server" ErrorMessage="Should be 5 Digits" ControlToValidate="txtPostalCode" ValidationExpression="\d{5}"></asp:RegularExpressionValidator>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtPostalCode" 
   Display="Dynamic" EnableClientScript="False" onload="RequiredFieldValidator1_Load"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Cannot be left blank" 
    Display="Dynamic" ControlToValidate="txtPostalCode" onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>

.aspx.cs文件:

 protected void RequiredFieldValidator1_Load(object sender, EventArgs e)
{

    if (IsPostBack)
    {
        //get which input TextBox will be validated.
        TextBox tx = (TextBox)this.FindControl(
            RequiredFieldValidator1.ControlToValidate);
        if (string.IsNullOrEmpty(tx.Text))
        {
            RequiredFieldValidator1.ErrorMessage =
                "Required field cannot be left blank.";
        }
    }


}
protected void CustomValidator1_ServerValidate(object source,ServerValidateEventArgs args)
{
    //Test whether the length of the value is more than 6 characters
    if (args.Value.Length <= 5)
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = false;
    }
}

它向我显示错误: if(string.IsNullOrEmpty(tx.Text))  异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。 我不知道该做什么可以有人帮助我,我将非常感激。

2 个答案:

答案 0 :(得分:0)

问题很可能是由于FindControl方法找不到文本框。如果您使用的是Master页面,则应尝试使用如下所示的递归FindControl方法。对于Root参数,您可以传递this.Master,而Id将是您的RequiredFieldValidator1.ControlToValidate

    TextBox tx = (TextBox)FindControlRecursive(this.Master, RequiredFieldValidator1.ControlToValidate);

Recusive FindControl:

    public static Control FindControlRecursive(Control Root, string Id)
    {
        if (Root.ID == Id)
            return Root;

        foreach (Control Ctl in Root.Controls)
        {
            Control FoundCtl = FindControlRecursive(Ctl, Id);
            if (FoundCtl != null)
                return FoundCtl;
        }

        return null;
    }

答案 1 :(得分:-1)

IsNullOrWhiteSpace方法的参考

http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx

指示指定的字符串是否为空,空或仅包含空格字符。

你可以这样做:

if(String.IsNullOrEmpty(tx.Text)|| tx.Text.Trim()。Length == 0)

String.IsNullOrEmpty

上面使用的

方法相当于:

if(tx.Text == null || tx.Text == String.Empty)

这意味着您仍然需要检查您的&#34; IsWhiteSpace&#34;使用.Trim()。长度== 0的情况。

IsNullOrEmpty方法的参考

http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx

指示指定的字符串是Nothing还是Empty字符串。

在你的例子中,你想确保你的字符串有一个值,这意味着你要确保字符串:

  1. 不为空
  2. 不是空字符串(String.Empty /&#34;&#34;)
  3. 不仅仅是空白