RegularExpressionValidator表达式仅在提交时

时间:2011-11-29 08:38:22

标签: asp.net .net validation

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

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

有人知道答案吗?

由于

4 个答案:

答案 0 :(得分:3)

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

EnableClientScript="False"

答案 1 :(得分:3)

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

然后在表格的sumbmit上,如果需要,仍然会调用并显示验证器。

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

答案 2 :(得分:2)

您应该切换正则表达式验证程序的客户端脚本验证。

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

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

答案 3 :(得分:0)

总结解决方案:

  • @ f0rza正在使用Page_Validate()

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

  • @pradmodtech正在使用EnableClientScript="False"

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

  • @jdavies正在使用validator.hide()

优点:需要更多的编码。
缺点:在更复杂的情况下具有100%的灵活性。

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

  • 没有输入=>在验证之前没有错误消息
  • 4位数字输入=>没有错误消息
  • 少于4位输入=>字段以结尾的“ 0”完成,没有错误消息。
    [在asp:RequiredValidatorblur上使用@ f0rza的解决方案,jQuery代码在 之后运行;这是change]
  • 的另一个缺点
  • 非数字输入=>即时错误消息