2

下面是我的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,它会显示错误的电子邮件验证消息。

谁能告诉我,如何停止这种消息显示?

如果需要对该问题进行任何澄清,请将其添加为评论。

4

6 回答 6

2

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

或者按照这里的建议:

什么决定了验证器触发的顺序?

于 2012-08-03T20:20:48.427 回答
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>

然后它不会提交,直到电子邮件格式正确。

于 2012-07-31T05:51:56.053 回答
1

似乎您的某些控件具有autopostback="true"并且您的这些控件在更新面板中,如果没有,那么您可以做的是..删除所有验证控件的显示属性和btnLogin_Click事件调用Validate();方法。

另请阅读MSDN上有关验证器的更多详细信息

你一定会得到你的答案......

于 2012-08-02T12:54:34.980 回答
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",这样当我键入一半电子邮件并从自动建议中选择并按 Enter 时,将不会显示错误消息。

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

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

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

因此,只有在格式正确的情况下,上述代码块才会运行用于检查输入凭据正确性的代码。

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

于 2012-08-04T06:21:14.137 回答
0

发生这种情况是因为客户端 REV 正在验证部分输入。例如,在上图中,REV 正在验证“r”作为其输入。为了验证这一点,

  1. 输入整个电子邮件地址“rupeshn@aol.com”>> 然后
  2. 使用向下箭头选择建议的电子邮件 >> 然后
  3. 按回车键。

REV这次不会抱怨了。

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

于 2012-08-02T18:58:44.603 回答
0

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

于 2017-04-01T05:43:10.393 回答