【问题标题】:Disable mvc3 client-side validations under certain conditions在某些条件下禁用 mvc3 客户端验证
【发布时间】:2012-10-02 05:00:59
【问题描述】:

我正在构建一个需要多个字段的搜索表单。单选按钮指示输入需要哪些字段,如下所示:

[ ] Field 1
[.] Field 2
    Field 3
[ ] Field 4

在上述情况下,现在需要Field 2Field 3,因为选中了相关的单选按钮。为此,我实现了RequiredIf 验证属性,它可以正常工作。

我的问题是其他验证。在这种情况下,Field 1 也有一个最小长度验证。如果Field 1 有任何不遵守最小长度验证的值,则该表单现在无效并且无法提交。

我需要一种方法来禁用对不需要的字段的验证。(并且还能够在选中另一个单选按钮时将它们重新设置)。

由于客户要求,无法将字段设置为“disabled=disabled”,这解决了问题。

我尝试在上述字段中删除data-val 属性或将它们设置为false,然后再次解析我的表单,失败得很惨。

编辑:只是确保。 问题在于客户端验证

【问题讨论】:

  • 你能选择性地清除控制器中的modelState错误吗?
  • 这是一个我正在实施的好主意。但我仍然希望客户端验证能够正常工作。

标签: c# javascript asp.net-mvc asp.net-mvc-3 unobtrusive-validation


【解决方案1】:

请记住,有 2 个验证发生:客户端和服务器端。因此,删除 data-val 属性将无济于事。

现在,在您的模型中,我认为您正在使用 [attributes] 添加这些验证规则。我认为这种方法不会让您进行条件验证。

在这种情况下,FluentValidation 可以为您提供帮助。 http://fluentvalidation.codeplex.com/

这很简单,你应该可以做这样的事情:

RuleFor(model => model.Field).NotEmpty().When(model => model.FieldEnabled);

【讨论】:

  • 它看起来很整洁!但是,我看不出它如何帮助我解决问题所在的客户端验证。
  • 它会同时做客户端和服务器..就是这样的想法。
【解决方案2】:

将字段设置为“已禁用”可以按预期工作。客户已经改变了对这个要求的看法。有时这是最好的解决方案。

这仍有待更好的解决方案。

编辑:

我没想过在验证插件上搜索文档。似乎有一些非常有趣的方法可供使用,例如 rules ( "remove", rules )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多