ModelError和ValidationResult有什么区别?

Mic*_*l R 6 c# validation asp.net-mvc modelstate

在ASP.NET MVC中,存在一个包含ModelErrorCollection 的ModelState类.ModelError表示模型绑定期间发生的错误.

我知道ValidationResult是从ValidationAttribute.IsValid方法返回的,并根据当前验证属性验证指定的值.我知道我们可以从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.

小智 2

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

ValidationResult使我们能够通过简单地实现IValidatableObject并让每个模型定义Validate方法来自定义链接到属性方法的错误消息。所以从我的角度来看,ValidationResult更像是一个用于配置模型验证的条件和结果的功能。

ModelState 使我们能够通过执行以下操作将 ValidationResult 中的自定义错误作为 ModelState 的一部分ModelState.AddModelError(memberName, validationResult.ErrorMessage)

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

Patrick 发表了一篇关于 MVC 验证的详细文章,您可以参考这里