asp.net 必填字段验证程序不工作

5anewei6  于 2023-02-17  发布在  .NET
关注(0)|答案(5)|浏览(151)

我使用了一个必填字段验证器,后跟一个正则表达式验证器,但必填字段验证器不工作.....

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

有没有人能看出问题所在?

ruarlubt

ruarlubt1#

RequiredFieldValidator是由客户端的onchange事件触发的,听起来好像您希望它是由onblur事件触发的,这样,从文本框移开时就会触发验证。
在此之前,我怀疑这就是您所看到的,为了验证它是否真的在工作,您需要触发onchange。为此,在文本框中输入一些文本,切换,切换回到它,清除文本框,然后再次切换。您现在应该看到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>

其次,通过添加onblur="rfvBlur()"更新<asp:TextBox.../>标记,使其现在看起来如下所示:

<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')"
dgiusagp

dgiusagp2#

将这一行添加到web.config<appSettings>部分对我很有效(当项目升级到. NET 4.5时,所有验证器都停止工作,我遇到了一个问题):

<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />

资料来源:
http://forums.asp.net/t/1876231.aspx?ASP+Net+4+5+Validation+Controls+not+working+with+AJAX+ToolkitScriptManager1

qlckcl4x

qlckcl4x3#

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

gzszwxb4

gzszwxb44#

我将以下内容放在btn_Click事件处理程序的顶部(以防止进一步执行代码),在“返回”时,rfv消息显示...

Page.Validate("your validation group");
        if (!Page.IsValid)
        {
            return;
        }
jobtbby3

jobtbby35#

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

相关问题