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

时间: 2024-08-03 09:48:32

模型验证(Model Validation)的相关文章

(转)MVC 3 数据验证 Model Validation 详解

继续我们前面所说的知识点进行下一个知识点的分析,这一次我们来说明一下数据验证.其实这是个很容易理解并掌握的地方,但是这会浪费大家狠多的时间,所以我来总结整理一下,节约一下大家宝贵的时间. 在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的数据验证Attribute来进行我们的数据验证.并且MVC 提供了客户端和服务器端 双层的验证,只有我们禁用了客

&lt;转&gt;ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解

MVC 3 数据验证 Model Validation 详解 在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的数据验证Attribute来进行我们的数据验证.并且MVC 提供了客户端和服务器端 双层的验证,只有我们禁用了客户端js以后,也会执行服务端验证,所以大大提高了我们的开发进度.今天我们就一起以一个初学者的身份来进入数据验证的殿堂. 首先,

MVC 3 数据验证 Model Validation 详解

续我们前面所说的知识点进行下一个知识点的分析,这一次我们来说明一下数据验证.其实这是个很容易理解并掌握的地方,但是这会浪费大家狠多的时间,所以我来总结整理一下,节约一下大家宝贵的时间. 在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的数据验证Attribute来进行我们的数据验证.并且MVC 提供了客户端和服务器端 双层的验证,只有我们禁用了客户

ASP.NET MVC 4 (十) 模型验证

模型验证是在模型绑定时检查从HTTP请求接收的数据是否合规以保证数据的有效性,在收到无效数据时给出提示帮助用户纠正错误的数据. 显式模型验证 验证数据最直接的方式就是在action方法中对接收的数据验证,以下面的Model为例: public class Appointment { public string ClientName { get; set; } public DateTime Date { get; set; } public bool TermsAccepted { get; s

第23章 模型验证

---------------------------------------------- 注:1.在web.config中,对system.web元素添加<globalization culture="en-US" uiCulture="en-US">来改变区域文件设置.       2.DataType注解属性不能用于验证用户输入,只能对使用模板辅助器进行渲染提示. 3.实现IValidatableObject接口验证模型类,不支持客户端验证 --

Model Validation in Asp.net MVC

原文:Model Validation in Asp.net MVC 本文用于记录Pro ASP.NET MVC 3 Framework中阐述的数据验证的方式. 先说服务器端的吧.最简单的一种方式自然是直接在Action方法中来进行了,如下: [HttpPost]        public ViewResult MakeBooking(Appointment appt)        {                    if (String.IsNullOrWhiteSpace(appt

EMF学习,为了实现可扩展可自定义的模型验证 - 各种实现方法学习

自: http://blog.csdn.net/javaman_chen/article/details/6057033 http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-emfvldt/ http://blog.csdn.net/james999/article/details/1624747 EMF Validation Framework 提供了对 EMF eObjects 的校验框架,和 EMF EValidator AP

ASP.NET MVC学习之模型验证篇

一.学习前的一句话 在这里要先感谢那些能够点开我随笔的博友们.慢慢的已经在博客园中度过一年半了,伊始只是将博客园作为自己学习的记录本一样使用,也不敢将自己的随笔发表到博客园首页,生怕自己的技艺不高,反倒成了笑话.但是随着时间的推移,再也按捺不住这种想法,于是就写了一篇随笔发表到博客园首页.让我意想不到的是有许多人都看了,而且也留下了评论.这让我鼓起勇气写了第二.三.四篇.到现在的连载,这里我希望那些从未发表过随笔的人可以尝试去发表,在这里他人不会嘲讽你,而是会给你更好的建议.说了这么多下面我们继

013_模型验证

模型验证(Model Validation):是确保用户接收的数据适合于绑定的模型,并且在不合适时,给用户提供有用的信息,以帮助他们修正其问题的过程. 模型验证过程一:检查接收的数据——是保持域模型完整性的方式之一. 模型验证过程二:帮助用户修正问题. 示例项目介绍 项目模板:Basic 项目名称:ModelValidation 一个新的模型类文件:Appointment.cs using System; using System.Collections.Generic; using Syste