在ASP.NET MVC中,存在一个包含ModelErrorCollection的 ModelState 类。 ModelError表示模型绑定期间发生的错误。
我知道从ValidationAttribute.IsValid方法返回 ValidationResult ,并根据当前验证属性验证指定的值。我知道我们可以从validationAttribute继承并覆盖IsValid()以编写自定义模型验证属性。
使用 ModelState 的示例:http://www.asp.net/mvc/tutorials/older-versions/models-(data)/performing-simple-validation-cs
使用 ValidationResult 的示例:http://www.codeproject.com/Articles/260177/Custom-Validation-Attribute-in-ASP-NET-MVC
这两者如何协同工作?还是不一起工作?什么是交集?这个问题试图更好地理解ASP.NET MVC验证方法。
为什么我感兴趣,为什么不使用数据注释?答案是,我想更好地理解ASP.NET MVC中动态字段的验证。在我的产品上下文中,我没有预先确定的属性模型来将validationAttributes附加到。
答案 0 :(得分:2)
我是ASP.NET MVC的新手。从我对你提到的2的理解。
ValidationResult 让我们能够自定义链接到属性方法的错误消息,只需实现IValidatableObject
并获取每个模型来定义Validate
方法。
因此,从我的观点来看,ValidationResult更像是用于配置模型验证的条件和结果的功能。
ModelState让我们可以通过ModelState.AddModelError(memberName, validationResult.ErrorMessage)
通过ValidationResult和ModelState的组合,我们仍然可以在控制器中使用if (ModelState.IsValid)
,而内部行为已经包含我们的自定义错误消息和验证条件。
Patrick发布了一篇关于MVC验证的详细文章,你可以参考here