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.
如同运行时自动地向模型状态注入验证错误信息一样,它也能够自动地从模型状态中提取错误信息。
控制器操作通常需要关心的问题是:模型状态是否有效?