1

我正在开发一个 MVC 4 项目。我在单个属性上遇到多个自定义验证属性的问题。假设我有 3 个用于单个属性的自定义验证属性,例如:

public class Test
{
    [customAttribute1]
    [customAttribute2]
    [customAttribute3]
    public string property1 { get; set; }
}

目前,当我发布他的表单时,所有三个自定义验证都在属性上执行(无论第一次验证通过还是失败)。

我想要的是,如果customAttribute1验证失败,则不需要使用下一个自定义属性验证属性。我怎样才能做到这一点?

4

2 回答 2

1

这种行为的目的是将模型中的所有错误返回(到 UI),因此用户可以同时修复所有错误......

假设您希望密码至少包含 8 个字符,并且至少包含一个大写字母和一个数字。您希望验证运行的方式是在密码不够长时停止而不检查其余部分。典型用例场景:

User sets password "foo" -> submit
error - Password too short
User sets it to "foofoofoo"
error - Password must have an uppercase
User sets it to "FooFooFoo"
error - Password must have a number
User goes away frustrated...

因此,如果要一起验证 3 个属性,我的建议是保持这种行为。如果这 3 个是独占的,那么按照其他人的建议进行操作并将它们组合成一个属性。

于 2013-08-29T14:21:50.547 回答
0

AFAIK 不支持有条件地订购或执行。

最好的办法是在同一个属性中包含所有这 3 个验证。

如果您非常需要这种验证,那么Fluent Validation可以为您完成。

于 2013-08-29T13:35:02.820 回答