【问题标题】:Understanding validity in a model where a property has more than one validation attribute了解属性具有多个验证属性的模型中的有效性
【发布时间】:2013-01-15 20:20:52
【问题描述】:

我正在开发一个 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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多