【问题标题】:How to show regular expression validation's message after button click only?仅在单击按钮后如何显示正则表达式验证消息?
【发布时间】:2012-07-31 05:47:29
【问题描述】:

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

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

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

【问题讨论】:

  • 你的正则表达式验证器在哪里
  • 抱歉,错过了正则表达式验证器。检查已编辑的问题。
  • 电子邮件建议中是否有前导空格?
  • 所以你想摆脱客户端验证,只在单击按钮时使用服务器端验证?

标签: asp.net .net validation


【解决方案1】:

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

或者按照这里的建议:

What determines the order validators fire in?

【讨论】:

    【解决方案2】:

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

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

    在邮件格式正确之前不会提交。

    【讨论】:

    • 错误地没有在这个问题中添加正则表达式验证。现在换了个问题。问题不是验证。问题是错误地显示验证消息。
    • 是的,验证正在运行。但仅在从建议中选择时才会显示错误。 :(
    • 我不要求验证。我在问您是否使用其他电子邮件,那么您是否能够成功实现您的目标,或者您也会在那里遇到同样的错误..
    • 那么可能是你的正则表达式错误。请更改它,然后重试...
    【解决方案3】:

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

    还可以在MSDN 上阅读有关验证器的更多详细信息

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

    【讨论】:

    • 我已经尝试过 autopostback="false"。但它不工作。我也不能调用 Validate() 因为这需要回发。
    • 我并不是说...验证不需要回发,这就是它们存在的原因。 Valdiate() 我们用来从客户端显式调用验证器...尝试将每个验证控件的 Display 属性设置为 Dynamic 并让我们知道...否则您应该尝试客户端验证,例如检查此链接 c-sharpcorner.com/uploadfile/purankaushal/103222006013805am/…
    • +1 感谢您提供有关在单击事件处理程序中验证页面的想法。但这并不能完全解决目的。因为如果验证失败,我不想检查输入是否正确。所以我正在使用 Page.IsValid 并相应地检查凭证的正确性。
    【解决方案4】:

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

    <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 来实现,但我想知道是否有任何方法可以使用验证器控件来实现它..

    【讨论】:

      【解决方案5】:

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

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

      REV 这次不会抱怨了。

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

      【讨论】:

      • 感谢您的建议。但是有什么方法可以停止部分输入验证?
      • 我建议的解决方法应该可行。但就操作 RFV 控件而言,我认为没有太多工作要做,因为事件的时序逻辑和触发它们的顺序是抽象的。
      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 2019-01-30
        • 1970-01-01
        • 2017-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多