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

我知道 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。

最佳答案

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

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

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

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

帕特里克(Patrick)发布了有关MVC验证的详细文章,您可以引用here

关于c# - ModelError和ValidationResult有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22210694/

10-09 01:17