必填字段验证器无效。

4

我已经使用了一个必填字段验证器和一个正则表达式验证器,但是必填字段验证器没有起作用......

<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>

有人能看出问题吗?


3
你在任何提交按钮上都有设置验证组吗? - Jeremy Elbourn
但是 RegularExpressionValidator 能够工作吗? - Frédéric Hamidi
确保验证摘要的验证组匹配? - brumScouse
你的ValidationExpression看起来完全不对。那些字符不应该被HTML编码。此外,您需要引用字符串的开头和结尾,以确保所有字符都被考虑在内。我认为您想使用类似于ValidationExpression="^[^<>&#!]*$"的东西。 - Buh Buh
5个回答

6
RequiredFieldValidator 会在客户端的 onchange 事件触发。看起来您希望它在 onblur 事件触发,这样从文本框切换时将会触发验证。
在深入讨论之前,我怀疑您正在看到这个问题,并且为了验证它是否有效,您需要触发 onchange。为此,在文本框中输入一些文本,切换到其他区域,然后再切换回来,清除文本框,最后再次切换。此时您应该可以看到 RequiredFieldValidator 的错误消息,因为其内容已经 更改
回到 onblur 问题。要实现这种行为,您可以在代码后台添加 onblur 属性,并调用以下方法来调用 JavaScript 的 ValidatorValidate(...) 方法:
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>

其次,更新<asp:TextBox.../>标记,添加onblur="rfvBlur()",使其看起来像这样:

<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px" CausesValidation="true"
            CssClass="txtStyle" Font-Names="Arial" MaxLength="1000" ValidationGroup="Valtxt"
            TabIndex="2" Rows="4" onblur="rfvBlur()" />

另一种选择是通过将以下属性添加到您的<asp:TextBox.../>标记中来验证整个ValidationGroup(无需额外的脚本块):
onblur="Page_ClientValidate('Valtxt')"

Jerry Scannell的评论:“我正在尝试将推荐的rfvBlur()合并到我的代码中,但我无法弄清楚你的示例中ClientID所引用的内容是什么。” - Peter O.
@PeterO。感谢您发布Jerry的评论。 @Jerry:ClientID从具有reqvalSummary ID的asp:RequiredFieldValidator中调用。您可以在原始问题中看到此验证器,该验证器正在验证txtSummary文本框控件。使用您为所需的每个控件/验证器提供的任何ID。您需要为希望使用此功能的每个控件/验证器执行此操作。 - Ahmad Mageed

4

1
为什么不将“RegEx”验证器的正则表达式更改为检查文本框是否为空,而不是使用另一个验证器?
无论如何,您可能没有为按钮或引发回发的控件指定ValidationGroup="Valtxt"。只需将ValidationGroup="Valtxt"添加到引发页面回发的按钮或服务器控件即可。

2
听起来可能有些奇怪,但是 RegularExpressionValidator 在空文本上不会触发,必须与 RequiredFieldValidator 配对使用。根据 MSDN 的说法: “如果输入控件为空,则不调用任何验证函数并且验证成功。使用 RequiredFieldValidator 控件可以防止用户跳过输入控件。” - Ahmad Mageed

0
我在btn_Click事件处理程序的顶部放置了以下代码(以防止进一步的代码执行),并在“返回”时显示rfv消息...
        Page.Validate("your validation group");
        if (!Page.IsValid)
        {
            return;
        }

-1
<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接