RequiredFieldValidator 控件出错
Error in RequiredFieldValidator control
.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;
}
}
它向我显示了一个错误:
如果 (string.IsNullOrEmpty(tx.Text))
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
我不知道该怎么做,有人可以帮我解决这个问题吗?我将不胜感激。
IsNullOrWhiteSpace 方法参考
http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx
指示指定的字符串是否为空、空或仅包含白色-space 个字符。
你可以这样做:
if (String.IsNullOrEmpty(tx.Text) || tx.Text.Trim().长度== 0)
String.IsNullOrEmpty
上面使用的方法等同于:
if (tx.Text == null || tx.Text== String.Empty)
这意味着您仍然需要根据示例使用 .Trim().Length == 0 检查您的 "IsWhiteSpace" 案例。
IsNullOrEmpty 方法参考
http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx
表示指定的字符串是空字符串还是空字符串。
在你的例子中你想确保你的字符串有一个值,这意味着你想确保字符串:
- 不为空
- 不是空串(String.Empty / "")
- 不只是白space
问题很可能是由于 FindControl
方法找不到文本框。如果您使用的是母版页,则应尝试使用如下所示的递归 FindControl 方法。对于 Root 参数,您可以传递 this.Master
,Id 就是您的 RequiredFieldValidator1.ControlToValidate
.
TextBox tx = (TextBox)FindControlRecursive(this.Master, RequiredFieldValidator1.ControlToValidate);
递归查找控件:
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;
}
.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;
}
}
它向我显示了一个错误: 如果 (string.IsNullOrEmpty(tx.Text)) 异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。 我不知道该怎么做,有人可以帮我解决这个问题吗?我将不胜感激。
IsNullOrWhiteSpace 方法参考
http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx
指示指定的字符串是否为空、空或仅包含白色-space 个字符。
你可以这样做:
if (String.IsNullOrEmpty(tx.Text) || tx.Text.Trim().长度== 0)
String.IsNullOrEmpty
上面使用的方法等同于:
if (tx.Text == null || tx.Text== String.Empty)
这意味着您仍然需要根据示例使用 .Trim().Length == 0 检查您的 "IsWhiteSpace" 案例。
IsNullOrEmpty 方法参考
http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx
表示指定的字符串是空字符串还是空字符串。
在你的例子中你想确保你的字符串有一个值,这意味着你想确保字符串:
- 不为空
- 不是空串(String.Empty / "")
- 不只是白space
问题很可能是由于 FindControl
方法找不到文本框。如果您使用的是母版页,则应尝试使用如下所示的递归 FindControl 方法。对于 Root 参数,您可以传递 this.Master
,Id 就是您的 RequiredFieldValidator1.ControlToValidate
.
TextBox tx = (TextBox)FindControlRecursive(this.Master, RequiredFieldValidator1.ControlToValidate);
递归查找控件:
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;
}