首页 > 代码库 > 模型验证(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>字段是必须的"的错误消息.