了解属性具有多个验证属性的模型中的有效性

时间:2013-01-15 20:20:53

标签: c# asp.net asp.net-mvc asp.net-mvc-3 custom-attributes

我正在开发一个MVC应用程序,我编写的一些模型代码有点像这样展开:

public class SomeModel
{
    public int? CodeA { get; set; }
    public int? CodeB { get; set; }

    [RequiredIf("CodeA", 3, ErrorMessage = "(required for [Something]!)")]
    [RequiredIf("CodeB", 99, ErrorMessage = "(required for [Other]!)")]
    public string Foo { get; set; }

    // SNIP: Unimportant details
}

注意:我正在使用RequiredIf()实施here

我已经修饰了属性Foo,用户可以在某些情况下使用两个RequiredIf()属性进行编辑。有两种不同的情况需要填写。在所有其他情况下,前端将解析用户的输入并在幕后“填充”它们。

问题:如果只有一个案例(例如CodeA = 3,CodeB = 4),并且用户未能输入任何内容而导致否定验证,模型仍会被标记为无效并为其记录ErrorMessage?或者,由于满足Code B条件,如果CodeA处于需要(并且未输入)的状态,是否会覆盖执行的验证?

另一种询问方式:是验证加法,还是一次只有一次验证的结果有隐含限制?

1 个答案:

答案 0 :(得分:1)

验证是否定的。要验证通过,所有验证器必须确认该字段有效。因此,对于Foo,如果CodeA验证程序通过且CodeB验证程序失败,则验证将失败。 Modelstate将包含该字段的单个错误。如果两者都失败,那么modelstate将包含该字段的两个错误。