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="[^&lt;&gt;&amp;#!]*" ValidationGroup="Valtxt">
        Invalid characters(&lt;&gt;&amp;#!) 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(&lt;&gt;&amp;#!) are not allowed" Text="*"
    ValidationExpression="[^&lt;&gt;&amp;#!]*" 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(&lt;&gt;&amp;#!) are not allowed" Text="*"
    ValidationExpression="[^&lt;&gt;&amp;#!]*" 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" />