在某些条件下禁用mvc3客户端验证

时间:2012-10-11 13:48:46

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

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

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

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

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

我需要一种方法来禁用对不需要的字段进行验证。(并且还可以将其设置为另一个单选按钮)。

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

我已尝试删除data-val属性或在所述字段上将其设置为false,然后再次解析我的表单,失败了。

编辑:确定。 问题是客户端验证

2 个答案:

答案 0 :(得分:1)

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

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

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

这很简单,你应该能够做到这样的事情:

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

答案 1 :(得分:0)

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

对于更好的解决方案,这仍然是开放的。

编辑:

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