首页 > 代码库 > 模型验证(Model Validation)
模型验证(Model Validation)
用户输入的数据并不一定是我们能够操作的数据,这样就需要我对用户输入的数据进行验证.这样就有的我们这里说的额模型验证(Model Validation).
模型验证:确保我们所接收到的数据适用于绑定到模型,并在不合适时,给用户提供用有的信息,以帮助用户修正问题的过程.
该过程的第一部分:检查接收的数据,并保证数据的完整性,正确性.
该过程的第二部分:帮助用户修正问题.
一:明确的验证模型
验证一个模型最直接的方法是在动作方法中做这种事情.
public ActionResult Index(Person person) { if(string.IsNullOrEmpty(person.FirstName)) { ModelState.AddModelError("FirstName", "請輸入第一個名稱"); } if(ModelState.IsValid) { return View("Completed"); } else { return View(); } }
ModelState.AddModelError方法注册所发生的错误.
在验证了所有的模型对象的所有属性之后,我们读取了ModelState.IsValid属性,以考察是否发生错误.只要有问题被注册,或者模型绑定遇到了问题,这个属性就会返回false.
在上面的例子中,如果没有问题,就会渲染Completeds视图,如果有问题,就简单的调用不待参数的View方法.这样会再次渲染当前视图,以便用户可以看到错误信息,并修改输入的值.
二:显示验证消息
模版辅助器方法应用于input元素的CSS样式指出了一个字段有问题,但他们不会告诉用户这个问题是什么.幸运的是有些便利的HTML辅助器方法可以帮助我们做这种事情.
Html.ValidationSummary() :把已经注册到该页面的验证错误的摘要显示给用户,如果没有错误,那么该辅助器不会生成任何HTML. 这个方法还有一些重载的版本
常用的ValidationSummary辅助器版本 | |
Html.ValidationSummary() | 生成所有验证错误的摘要 |
Html.ValidationSummary(bool) | 如果bool参数为true,那么只显示模型级别的错误;如果为false,那么显示所有错误 |
Html.ValidationSummary(string) | 在所有验证错误摘要之前显示一条信息. |
Html.ValidationSummary(bool,string) | 在验证错误前显示一条信息,如果bool为True,只显示模型级别的错误 |
显示属性级的验证消息.
属性级错误可以显示在相应字段的旁边.
Html.ValidationMessageFor() 为单个模型属性显示验证错误.
三.使用其他验证技术
在动作方法中执行模型验证只是MVC框架中可用的验证技术之一.
1.在模型绑定器中执行验证.
默认模型绑定器把验证作为绑定过程的一部分.
框架内建的默认模型绑定器类DefaultModel为我们提供了一些可以重写的有用的方法,以便对一个绑定器添加验证.
方法 | 描述 | 默认实现 |
OnModelUpdated | 在绑定器试图对模型对象中所有的属性进行赋值时调用 | 运用有模型元数据定义的验证规则,并用ModelState注册错误 |
SetProperty | 在绑定器想把一个值运用于一个特定的属性是调用 | 如果该属性不能保存null值,并且没有可用运用的值,那么将ModelState注册一条"<name>字段是必须的"的错误消息. |