Asp.net 必需的字段验证器不工作
我使用了一个必需的字段验证器,后面跟着一个正则表达式验证器,但是必需的字段验证器不工作Asp.net 必需的字段验证器不工作,asp.net,validation,requiredfieldvalidator,Asp.net,Validation,Requiredfieldvalidator,我使用了一个必需的字段验证器,后面跟着一个正则表达式验证器,但是必需的字段验证器不工作 <asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px" CssClass="txtStyle" Font-Names="Arial" MaxLength="1000" ValidationGroup="Valtxt" TabIndex="2" Rows="4"> </asp
<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px"
CssClass="txtStyle" Font-Names="Arial" MaxLength="1000"
ValidationGroup="Valtxt" TabIndex="2" Rows="4">
</asp:TextBox>
<asp:RegularExpressionValidator ID="regValSummary" runat="server"
ControlToValidate="txtSummary" Display="Dynamic"
ValidationExpression="[^<>&#!]*" ValidationGroup="Valtxt">
Invalid characters(<>&#!) are not allowed
</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="reqvalSummary" runat="server"
ControlToValidate="txtSummary" ErrorMessage="Summary is required"
ValidationGroup="Valtxt" Display="Dynamic">
</asp:RequiredFieldValidator>
不允许使用无效字符(&;#!)
有人看到问题了吗?客户端
onchange
事件触发RequiredFieldValidator
。听起来好像您希望它是由onblur
事件触发的,这样,从文本框中切换将触发验证
在开始之前,我怀疑这就是您所看到的,为了验证它是否真正起作用,您需要触发onchange
。要执行此操作,请在文本框中输入一些文本,单击tab键,再单击tab键,清除文本框,然后再次单击tab键。您现在应该看到RequiredFieldValidator的错误消息,因为它的内容已更改
回到onblur
问题。要实现该行为,可以在代码隐藏中添加onblur
属性,并让它调用ValidatorValidate(…)
JavaScript方法,如下所示:
void Page_Load(object sender, EventArgs e)
{
txtSummary.Attributes.Add("onblur", "ValidatorValidate(" + reqvalSummary.ClientID + ")");
}
或者,您也可以在标记中完成同样的事情。首先,添加此脚本块:
<script type="text/javascript">
function rfvBlur() {
var rfv = document.getElementById("<%= reqvalSummary.ClientID %>");
ValidatorValidate(rfv);
}
</script>
另一个选项是通过向
标记添加以下属性来验证整个ValidationGroup(不需要额外的脚本块):
为什么不更改“RegEx”验证器的正则表达式以检查文本框是否为空,而不是使用另一个验证器 无论如何,您可能没有为引发回发的按钮或控件指定ValidationGroup=“Valtxt”。只需将ValidationGroup=“Valtxt”添加到按钮或服务器控件,即可将帖子提升到页面
<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px"
CssClass="txtStyle" Font-Names="Arial" MaxLength="1000"
TabIndex="2" Rows="4">
</asp:TextBox>
<asp:RegularExpressionValidator ID="regValSummary" runat="server"
ControlToValidate="txtSummary" ErrorMessage="Invalid characters(<>&#!) are not allowed" Text="*"
ValidationExpression="[^<>&#!]*" ValidationGroup="Valtxt">
</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="reqvalSummary" runat="server"
ControlToValidate="txtSummary" ErrorMessage="Summary is required" Text="*"
ValidationGroup="Valtxt">
</asp:RequiredFieldValidator>
将此行添加到是否在任何提交按钮上都有验证组?但是RegularExpressionValidator
可以工作?确保验证摘要的验证组匹配?仅供参考:您的ValidationExpression完全不正确。这些字符不应该是html编码的。此外,还需要引用字符串的开头和结尾,以确保考虑到所有字符。我想您应该使用更像ValidationExpression=“^[^&!]*$”的东西,尽管听起来很奇怪,RegularExpressionValidator
不会在空文本上触发,必须与RequiredFieldValidator
配对:“如果输入控件为空,则不会调用任何验证函数,验证将成功。请使用RequiredFieldValidator控件以防止用户跳过输入控件。”Jerry Scannell的评论:“我正在尝试合并推荐的rfvBlur(),但我无法确定在您的示例中ClientID引用了什么。”@PeterO。谢谢你发表杰瑞的评论@Jerry:ID为reqvalSummary
的asp:RequiredFieldValidator
取消了ClientID
。您可以在原始问题中看到这个验证器,它正在验证txtsummmary
TextBox控件。使用您为RequiredFieldValidator
控件提供的ID
。您将需要为您打算使用的每个控件/验证器执行此操作。
onblur="Page_ClientValidate('Valtxt')"
<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px"
CssClass="txtStyle" Font-Names="Arial" MaxLength="1000"
TabIndex="2" Rows="4">
</asp:TextBox>
<asp:RegularExpressionValidator ID="regValSummary" runat="server"
ControlToValidate="txtSummary" ErrorMessage="Invalid characters(<>&#!) are not allowed" Text="*"
ValidationExpression="[^<>&#!]*" ValidationGroup="Valtxt">
</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="reqvalSummary" runat="server"
ControlToValidate="txtSummary" ErrorMessage="Summary is required" Text="*"
ValidationGroup="Valtxt">
</asp:RequiredFieldValidator>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />