Model注解的后台原理

Asp.net MVC的验证特性是由模型绑定器、模型元数据、模型验证器和模型状态组成的协调系统的一部分。

1.验证和模型绑定

默认情况下,Asp.net MVC框架在模型绑定石执行验证逻辑,在操作方法带有参数时,模型绑定将隐式地执行

[HttpPost]
Public ActionResult Create(Album album)
{
      // todo.....  
}

也可利用控制器的UpdateModel或TryUpdateModel方法显示的执行模型绑定:

[HttpPost]
Public ActionResult Eidt(int id, FormCollection collection)
{
       Var album = storeDB.Album.Find(id);
       if (TryUpdateModel(album))
       {
           //todo.....
       }
}

模型绑定器一旦使用新值完成对模型属性的更新,就会利用当前的模型元数据获得模型的所有验证器。Asp.net MVC运行时提供了一个验证器(DataAnnotationsModelValidator)来与数据注解一同工作。这个模型验证器会找到所有的验证特性并执行塔门包含的验证逻辑。模型绑定器捕获所有失败的验证规则并把它们放入模型状态中。

2.验证和模型状态

模型绑定的主要副产品就是模型状态(利用Controller派生类对象的ModelState属性可以访问到)。模型状态不仅包含了用户所有项放入模型属性里的值,也包括与每一个属性相关联的所有错误(还有所有与模型对象本身有关的错误)。如果在模型状态中存在错误,那么ModelState.IsValid就返回Fasle.

如同运行时自动地向模型状态注入验证错误信息一样,它也能够自动地从模型状态中提取错误信息。

控制器操作通常需要关心的问题是:模型状态是否有效?

原文地址:https://www.cnblogs.com/lc-ant/p/3905313.html