【问题标题】: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:RegularExpressionValidator 和ValidationExpression="^[0-9]{4}$" 上使用@jdavies 的解决方案,再加上asp:RequiredValidator,因为我需要这些行为:
- 无输入 => 验证前无错误消息
- 4 位输入 => 没有错误消息
- 少于 4 位输入 => 字段以尾随“0”完成,没有错误消息。
[在blur 或change 上使用@f0rza 的解决方案,jQuery 代码在验证后运行;这是Page_Validate()]的另一个骗局
- 非数字输入 => 即时错误消息