如何在按钮单击后显示正则表达式验证消息?

时间:2012-07-31 05:47:29

标签: asp.net .net validation

下面是我的HTML代码。我有一个电子邮件文本框,还有一个登录按钮。我已经为电子邮件文本框添加了必需的字段验证器和正则表达式验证器。

问题在于,当我在电子邮件文本框中键入一些内容时,浏览器的自动建议会显示一些电子邮件列表。当我使用向下箭头键选择任何这些电子邮件并输入密钥时,即使电子邮件格式正确,也会显示正则表达式验证的错误消息。

<asp:RequiredFieldValidator ID="reqValUserName" runat="server" 
    ErrorMessage="Email is required!" 
    ControlToValidate="txtUserName"
    ValidationGroup="validateCredential"
    Display="Dynamic">
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="regValUserName" runat="server" 
    ErrorMessage="Incorrect format!"
    ControlToValidate="txtUserName" 
    ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 
    ValidationGroup="validateCredential"
    Display="Static">
</asp:RegularExpressionValidator>                 

     <asp:TextBox ID="txtUserName" runat="server"
           TabIndex="1" CssClass="inputCredential" MaxLength="60"
           AccessKey="E" 
           ValidationGroup="validateCredential">
     </asp:TextBox>

     <asp:Button ID="btnLogin" runat="server" CssClass="btnPrimary" 
           Text="Login" onclick="btnLogin_Click" 
           ValidationGroup="validateCredential"/>

enter image description here

在此图片中,如果您看到我从建议中选择了电子邮件并按Enter键,则显示错误的电子邮件验证消息。

任何人都可以告诉我,如何阻止这种消息显示?

如果对问题有任何澄清,请将其添加为评论。

6 个答案:

答案 0 :(得分:2)

您可以将EnableClientValidation =“false”属性添加到正则表达式验证程序,以便它只在其他验证程序通过后检查服务器上的格式。

或遵循此处的建议:

What determines the order validators fire in?

答案 1 :(得分:1)

还要添加正则表达式验证器 用于电子邮件文本框

<asp:RegularExpressionValidator ID="regtxtPrimaryEmail" runat="server" ControlToValidate="txtEmailId"
                                            Display="Dynamic" CssClass="cssVal" ToolTip="Invalid email." ValidationGroup="registration"
                                            ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>

然后在电子邮件格式正确之前不会提交。

答案 2 :(得分:1)

您的某些控件似乎有autopostback="true",如果没有,您的这些控件都在更新面板中。您可以执行的操作是..删除所有验证控件的显示属性以及btnLogin_Click事件调用Validate();方法。

另请参阅MSDN

上有关验证者的详细信息

你肯定会得到答案....

答案 3 :(得分:1)

感谢您的所有答案和建议。 以下是我在完成所有答案后所做的工作。

<asp:RegularExpressionValidator ID="regValUserName" runat="server" 
     ErrorMessage="Incorrect format!"
     ControlToValidate="txtUserName" 
     ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 
     ValidationGroup="validateCredential"
     Display="Dynamic" EnableClientScript="false">
</asp:RegularExpressionValidator>

正如您所看到的,我添加了EnableClientScript =“false”,以便在输入一半电子邮件并从自动建议中选择并按回车键时不会显示错误消息。

现在问题是它始终检查输入的凭据是否正确,而不是在服务器端进行验证。所以我有一些不必要的代码执行和数据库交互。

所以在登录按钮的点击事件处理程序中,我做了以下更改。

if(Page.IsValid)
{
     // My credential check code
}

因此,上面的代码块将运行代码,以便在输入的凭据格式正确时检查输入凭据的正确性。

但我仍在寻找更好的答案。这只是一个解决方法。因为在性能方面,服务器端验证永远不能匹配客户端验证。在这里,我对可用性妥协。因为我希望用户在输入错误的格式化电子邮件后立即得到通知。这可以通过使用javascript来实现,但我想知道是否有任何方法可以使用验证器控件实现它。

答案 4 :(得分:0)

这是因为客户端REV正在验证部分输入。例如,在上图中,REV正在验证&#34; r&#34;作为它的输入。为了验证这一点,

  1. 输入整个电子邮件地址&#34; rupeshn@aol.com" &GT;&GT;那么
  2. 使用向下箭头&gt;&gt;选择建议的电子邮件那么
  3. 点击回车键。
  4. REV此次不会抱怨。

    至于解决方案:在javascript中实现REV。在文本框旁边添加标签以显示错误消息。当光标退出文本框时调用js。如果验证失败,请在js中找到标签并添加错误消息。

答案 5 :(得分:0)

只需看到验证器的属性,您就会在“外观”部分找到“显示”属性,将其设置为动态和VOLA !!