【问题标题】:ASP.NET RegularExpressionValidator Triggers CompareValidatorASP.NET RegularExpressionValidator 触发器 CompareValidator
【发布时间】:2015-08-11 21:38:47
【问题描述】:

基本上,我的代码如下所示:

<div>

  <asp:TextBox ID="txtBox1" class="inline-block" runat="server" />
  <asp:RegularExpressionValidator ID="regExTxtBox1" runat="server" ControlToValidate="txtBox1" ErrorMessage="Enter an integer or decimal greater than 0." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" />
  <asp:RequiredFieldValidator ID="reqFldTxtBox1" runat="server" ControlToValidate="txtBox1" ErrorMessage="Requires a number." Display="Dynamic" InitialValue="" />
  <asp:CompareValidator id="cmprTxtBox1" runat="server" ControlToValidate="txtBox1" ControlToCompare="txtBox2" Type="Double" Display="Dynamic" Operator="LessThanEqual" Text="Error: txtBox1 is greater than txtBox2." />

</div>

<br />

<div>

  <asp:TextBox ID="txtBox2" runat="server" />
  <asp:RegularExpressionValidator ID="regExTxtBox2" runat="server" ControlToValidate="txtBox2" ErrorMessage="Enter an integer or decimal greater than 0." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" />
  <asp:RequiredFieldValidator ID="reqFldTxtBox2" runat="server" ControlToValidate="txtBox2" ErrorMessage="Requires a number." Display="Dynamic" InitialValue="" />

</div>

我有两个使用正则表达式验证器的文本框,以强制用户只输入整数或小数。我还希望 txtBox2 中的输入大于 txtBox1,因此我在 txtBox1 上使用了比较验证器,以检查 txtBox1 中的数字何时大于 txtBox2。

我遇到的问题是我的 CompareValidator 总是在 RegularExpressionValidator 触发时触发。当 txtBox1 中有正常数字而 txtBox2 中没有任何内容时,CompareValidator 完全满足。但无论 txtBox2 中有什么内容,只要 RegularExpressionValidator 失败,它都会失败。

当然,系统运行正常,因为无论哪种方式,当验证器返回无效时,用户都无法输入任何值。但我不希望用户看到不必要的错误消息。

如果没有任何解决方案,我认为我可以实现自定义验证器。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    请使用 Validation Group 属性检查..... For and Validation Control 并将相同的验证组放入提交按钮,以便在按钮单击时验证..... 希望对你有帮助.....

    【讨论】:

      【解决方案2】:

      我想出了一个解决方法。

      对于带有比较验证器的文本框,我添加了一个对 javascript 方法的“onchange”调用。在该方法中,它检查正则表达式是否失败。如果有,它将比较验证器设置为 true,然后更新显示。

      javascript 中的实现如下所示:

      function txtBoxChanged() {
      
          var txtBox1 = document.getElementById('<%=txtBox1.ClientID%>').value;
      
          var rgx = new RegExp(/^0*[1-9]+\d*(\.\d+)?$|^0*\.0*[1-9]+\d*$/)
      
          if (!(rgx.test(txtBox1))) {
      
            document.getElementById('<%=cmprTxtBox1.ClientID%>').isvalid = true;
            ValidatorUpdateDisplay(document.getElementById('<%=cmprTxtBox1.ClientID%>'));
      
          }
      
      }
      

      还有我的 HTML:

      <div>
      
        <asp:TextBox ID="txtBox1" class="inline-block" runat="server" onchange="txtBoxChanged()" />
        <asp:RegularExpressionValidator ID="regExTxtBox1" runat="server" ControlToValidate="txtBox1" ErrorMessage="Enter an integer or decimal greater than 0." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" />
        <asp:RequiredFieldValidator ID="reqFldTxtBox1" runat="server" ControlToValidate="txtBox1" ErrorMessage="Requires a number." Display="Dynamic" InitialValue="" />
        <asp:CompareValidator id="cmprTxtBox1" runat="server" ControlToValidate="txtBox1" ControlToCompare="txtBox2" Type="Double" Display="Dynamic" Operator="LessThanEqual" Text="Error: txtBox1 is greater than txtBox2." />
      
      </div>
      
      <div>
      
        <asp:TextBox ID="txtBox2" runat="server" onchange="txtBoxChanged()" />
        <asp:RegularExpressionValidator ID="regExTxtBox2" runat="server" ControlToValidate="txtBox2" ErrorMessage="Enter an integer or decimal greater than 0." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" />
        <asp:RequiredFieldValidator ID="reqFldTxtBox2" runat="server" ControlToValidate="txtBox2" ErrorMessage="Requires a number." Display="Dynamic" InitialValue="" />
      
      </div>
      

      我必须这样做,所以两个文本框都调用了这个方法。否则,即使 txtBox2 上的正则表达式失败,比较验证器也会出现。这是有道理的,因为它正在查看两个文本框。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多