单个属性上的多个自定义验证属性

时间:2013-08-29 12:29:22

标签: c# asp.net-mvc asp.net-mvc-4

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

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

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

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

2 个答案:

答案 0 :(得分: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是独占的,那么按照其他人的建议做,并将它们组合成一个属性。

答案 1 :(得分:0)

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

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

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