2010-11-01 110 views
3

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

<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

您是否有任何提交按钮上的验证组? – jelbourn 2010-11-01 13:11:57

+0

但是'RegularExpressionValidator'确实有效吗? – 2010-11-01 13:13:31

+0

确保验证摘要匹配的验证组? – brumScouse 2010-11-01 13:14:23

回答

6

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()" /> 

还有一种选择是,通过添加验证整个的ValidationGroup以下属性您<asp:TextBox.../>标记(无需额外的脚本块需要):

onblur="Page_ClientValidate('Valtxt')" 
+0

杰里斯坎内尔的评论:”我试图纳入rfvBlur()推荐,但我无法弄清楚你的例子中引用了什么ClientID。“ – 2012-02-28 18:38:48

+0

@PeterO。谢谢张贴Jerry的评论@Jerry: 'ClientID'被一个ID为'reqvalSummary'的'asp:RequiredFieldValidator'调用,你可以在原始问题中看到这个验证器,它正在验证'txtSummary' TextBox控件。你需要为你打算使用的每个控件/验证器执行此操作 – 2012-02-28 19:24:28

1

你为什么不改变正则表达式的“RegEx”验证器来检查文本框是否为空而不是使用另一个验证器?

无论如何,您可能没有指定ValidationGroup =“Valtxt”作为引发回发的按钮或控件。只需添加=的ValidationGroup“Valtxt”到提高后的页面

+2

听起来很奇怪,'RegularExpressionValidator'不会触发空文本,必须配对使用'RequiredFieldValidator' [来自MSDN](http://msdn.microsoft.com/en-us/library/eahwtc9e.aspx):*“如果输入控件为空,则不会调用验证函数并验证成功。使用RequiredFieldValidator控件来防止用户跳过输入控件。“* – 2010-11-01 16:14:05

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

您应该可以解释答案以及它的工作原理。 – 0x499602D2 2012-12-02 22:55:22