【问题标题】:RegularExpressionValidator expression only on submit仅在提交时的正则表达式验证器表达式
【发布时间】:2011-11-29 08:38:21
【问题描述】:

我在需要 10 个数字作为输入的文本框上使用 ASP.NET 中的 RegularExpressionValidator。我的问题是每当我切换到不同的控件时都会弹出错误消息。例如:当我只输入 1 个数字然后切换到不同的文本框时,错误消息告诉我我需要 10 个数字。

我希望 REV 仅在按下提交按钮时进行验证。我尝试在文本框中添加“CauseValidation=False”,但这并没有解决问题。

有人知道答案吗?

谢谢

【问题讨论】:

    标签: asp.net .net validation


    【解决方案1】:

    为了避免完全禁用客户端脚本(通过设置EnableClientScript="False")。您可以尝试处理附加了验证控件的 TextBox 的 change 事件。隐藏可能已显示或未显示的验证消息。

    然后在提交表单时,如果需要,验证器仍会被调用并显示。

    <script type="text/javascript">
        $(function () {
            $('#<%= TextBox1.ClientID %>').change(function (e) {
                var validator = $('#<%= RegularExpressionValidator1.ClientID %>');
                validator.hide();
            });
        });
    </script>
    

    【讨论】:

      【解决方案2】:

      您可以在服务器端验证正则表达式,因此只有当您点击提交按钮时,RegularExpressionValidator 才会在服务器端而不是客户端进行验证。 为此,您需要设置验证器的属性

      EnableClientScript="False"

      【讨论】:

        【解决方案3】:

        您应该为正则表达式验证器切换客户端脚本验证。

        然后在提交按钮事件处理程序上执行以下操作:

        Page.Validate();
        if (Page.IsValid)
        {
           // all ok
        }
        

        【讨论】:

          【解决方案4】:

          总结解决方案:

          • @f0rza 使用 Page_Validate():

          优点: 单行,您可以在 element.change() 事件中调用它。
          缺点: 触发所有验证器,这通常是不希望的.

          • @pradmodtech 使用 EnableClientScript="False":

          优点:单行,完全符合原始答案。
          缺点:如果您只想忽略一些“无效”输入,则不够灵活.

          • @jdavies 使用 validator.hide():

          优点:需要更多编码。
          缺点:在更复杂的场景中 100% 灵活。

          我在asp:RegularExpressionValidatorValidationExpression="^[0-9]{4}$" 上使用@jdavies 的解决方案,再加上asp:RequiredValidator,因为我需要这些行为:

          • 无输入 => 验证前无错误消息
          • 4 位输入 => 没有错误消息
          • 少于 4 位输入 => 字段以尾随“0”完成,没有错误消息。
            [在blurchange 上使用@f0rza 的解决方案,jQuery 代码在验证后运行;这是Page_Validate()]的另一个骗局
          • 非数字输入 => 即时错误消息

          【讨论】:

            猜你喜欢
            • 2014-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-08
            相关资源
            最近更新 更多