【问题标题】:ASP.NET validators - stop validating on first failureASP.NET 验证器 - 在第一次失败时停止验证
【发布时间】:2009-12-09 14:21:34
【问题描述】:

如果发现先前的验证器无效 - 在控制级别,是否有方法阻止验证器被评估?

例如,如果我创建一个包含 RequiredFieldValidator、RegularExpressionValidator 和自定义验证器的文本框,我不希望在 RequiredFieldValidator 或 RegularExpressionValidator 已经确定的情况下评估自定义验证器输入无效。

具体来说,在这种情况下,自定义验证器不支持客户端,但如果没有输入数据(使用 RequiredFieldValidator),我想阻止回发,而不是进行回发。

【问题讨论】:

  • 您使用的是 webforms 还是 mvc?另外,您是否有某种用于客户端验证的库,例如 jQuery Validate 或 VS 附带的 MS 库?
  • 我正在使用来自 ASP.NET 的标准 RequiredFieldValidator 等
  • RequiredFieldValidator默认开启客户端,所以文本框为空时不会回发。

标签: asp.net validation customvalidator requiredfieldvalidator


【解决方案1】:

如果文本框为空,RegularExpressionValidator 和 RequiredFieldValidator 都返回 true。换句话说:默认情况下,它们不会验证您的空文本框是否清空,因此您正在做正确的事情,它应该可以按预期开箱即用。

RequiredFieldValidator 和 RegularExpressionValidator 默认也会验证客户端 - 使用 JavaScript - 因此如果其中任何一个失败,都不会发生回发。

记得在客户端和服务器端测试你的正则表达式字符串,因为 JavaScript 和 .NET 正则表达式不是 100% 兼容的。

最好在所有控件上定义ValidationGroup,包括应该触发验证的按钮。这应该启用服务器端验证,但我不是 100% 确定,所以如果您的 CustomValidator 没有被触发,请添加以下代码作为 myButton_Click 方法的第一行:

myButton_Click(object Sender, EventArgs e)
{
    Page.Validate("MyValidationGroup");
    if (!Page.IsValid)
    {
        return;
    }

    // ...
}

Page.Validate() 接受一个validationGroup 作为参数。

【讨论】:

  • 你是对的;开箱即用的功能正是我想要的,不幸的是,用于导致回发的按钮被无意中标记为 CausesValidation="False" 我没有注意到。这就是回发发生的原因,因为验证器实际上并未在客户端进行评估!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多