我在ASP.NET中在一个需要10个数字作为输入的文本框中使用RegularExpressionValidator。我的问题是每当我切换到不同的控件时弹出错误信息。例如:当我只输入1个数字然后切换到另一个文本框时,错误消息告诉我需要10个数字。
我希望REV仅在按下提交按钮时进行验证。我试图在文本框中添加“CauseValidation = False”,但这并没有解决问题。
有人知道答案吗?
由于
答案 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)
总结解决方案:
Page_Validate()
: 优点:单行代码,您可以在element.change()事件中调用它。
缺点:触发所有验证器,通常是不希望的。
EnableClientScript="False"
: 优点:单线,完全适合原始答案。
缺点:如果您只想忽略某些“无效”输入,则不够灵活。
validator.hide()
: 优点:需要更多的编码。
缺点:在更复杂的情况下具有100%的灵活性。
我在具有asp:RegularExpressionValidator
和ValidationExpression="^[0-9]{4}$"
的{{1}}上使用@jdavies的解决方案,因为我需要这些行为:
asp:RequiredValidator
或blur
上使用@ f0rza的解决方案,jQuery代码在 之后运行;这是change
]