ModelError和ValidationResult有什么区别?

时间:2014-03-05 22:24:01

标签: c# asp.net-mvc validation modelstate

在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附加到。

1 个答案:

答案 0 :(得分:2)

我是ASP.NET MVC的新手。从我对你提到的2的理解。

ValidationResult 让我们能够自定义链接到属性方法的错误消息,只需实现IValidatableObject并获取每个模型来定义Validate方法。 因此,从我的观点来看,ValidationResult更像是用于配置模型验证的条件和结果的功能。

ModelState让我们可以通过ModelState.AddModelError(memberName, validationResult.ErrorMessage)

从ValidationResult作为ModelState的一部分来制作我们的自定义错误

通过ValidationResult和ModelState的组合,我们仍然可以在控制器中使用if (ModelState.IsValid),而内部行为已经包含我们的自定义错误消息和验证条件。

Patrick发布了一篇关于MVC验证的详细文章,你可以参考here