Model验证

我们都知道开发互联网应用的时候永远不要相信客户端传过来的数据(这样的话安全隐患会大大降低)所以我们不仅要对其客户端验证,也要在服务端进行验证。MVC 3 给我们提供了一个简单的方式进行数据验证。而且是客户端和服务端双向验证很像webform的验证控件。 MVC 3 是默认开启客户端验证的,如果您用的是MVC 2 您还得再改一下配置文件导入两个jquery文件就ok了。
下面我给您打开一下Web.config 文件您看下这是MVC 3 的默认开启了javascript 客户端验证。

1   <appSettings>
2     <add key="ClientValidationEnabled" value="true"/>
3     <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
4   </appSettings>

第2行很明显已经开启了验证,那您又说了刚才你不是说还得在页面里加两个jquery文件吗?您别着急啊马上贴代码下面这个一会儿将要建的Create.cshtml页面

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

好,下一步咱就先改写一下上一篇的Person类直接上代码然后解释

 1 public class Person
 2     {
 3         [DisplayName("编号")]
 4         [Required(ErrorMessage = "编号不能为空!")]
 5         [RegularExpression("00\\d*", ErrorMessage = "编号必须以00开始,且至少三位")]
 6         //[IdCard(ErrorMessage = "编号必须以00开始,且至少三位")]
 7         public string IdCard { get; set; }
 8
 9         [DisplayName("姓名")]
10         [Required]
11         [StringLength(3, ErrorMessage = "姓名最多为3个汉字")]
12         public string Name { get; set; }
13         [DisplayName("性别")]
14         [RegularExpression("男|女", ErrorMessage = "性别错误!男/女")]
15         public string Sex { get; set; }
16         [DisplayName("年龄")]
17         [Range(0, 150, ErrorMessage = "年龄应在0 - 150 岁之间")]
18         public int Age { get; set; }
19     }

您可能还不了解什么是特性什么是属性在这我给您简单的介绍下,知道的可以直接跳过了。
  属性:就是您经常在类里面写的那些比如上面第7行 public string IdCard {get;set;} 这个IdCard 就是 Person 类的一个属性。它有其对应的get set 
      特性:故名思议特别的属性,就如您所见第 3 - 5 行就是Idcard属性的特性,它是对一个属性的限制,Modul 中的验证就是通过特性实现的。咱可以实现自己的验证特性本文最后将会讲到。
知道了什么是特性属性了咱就分析下上面的代码吧!

  第9行 [DisplayName("姓名")] 客户端要显示的文本,View层会有专门的Html helper 来读取它,这个一会儿再说。
  第10行 [Required]  故名思议,必须必填的意思,就是限制它对于的属性字段是必填了,如果客户端没有填它会返回您设置的那个错误信息,再这提醒您一下如果您没有指定ErrorMessage这个属性的话MVC 呢会自动的提示  .. 字段是必填的,并且支持国际化是中文提示。
  第11行 [StringLength(3, ErrorMessage = "姓名最多为3个汉字")] 这个特性就是现在字符串长度最长是多长。
  第14行[RegularExpression("男|女", ErrorMessage = "性别错误!男/女")] 这个属性是通过正则表达式验证。如果您还不知道正则表达式是什么东西我建议您看下张子阳的一篇博文由于排版有问题他只提供了电子版总共130多页吧http://www.tracefact.net/document/Regular-Expression-Tutorial.pdf
   第17行[Range(0, 150, ErrorMessage = "年龄应在0 - 150 岁之间")]  限制 年龄必须在 0 - 150 之间。

好进行下一步,添加两个创建Person 的 Action 在这里为什么要创建两个,因为要想创建一个Person(即添加一条信息)我们需要两步:
  第一:输入url地址客户端请求服务器生成表单  -- 这里是产生的get请求
  第二:点击submit 提交按钮,客户端会将表单中的数据发送给服务器 -- 这里是post 请求
这里在强调一点Action默认是get请求,如果要把它变成post请求需要在其上面加一个[HttpPost] 特性。

下面看一下Controller是怎么写的这两个Action吧

 1 /// <summary>
 2         /// create的get请求
 3         /// </summary>
 4         /// <returns></returns>
 5         public ActionResult Create()
 6         {
 7             Person p = new Person();
 8             return View(p);
 9         }
10         /// <summary>
11         /// create的post请求
12         /// </summary>
13         /// <param name="p"></param>
14         /// <returns></returns>
15         [HttpPost]
16         public string Create(Person p)
17         {
18             //为了演示方便 ,  提交的值就别在转向另一个视图了 在这之间输入就ok了
19             StringBuilder sb = new StringBuilder();
20             if (ModelState.IsValid)
21             {
22                 sb.Append("编号:").Append(p.IdCard).Append("姓名:").Append(p.Name)
23                   .Append("年龄:").Append(p.Age).Append("性别:").Append(p.Sex);
24                 return sb.ToString();
25             }
26
27             return null;
28         }

代码很简单不做多余解释!
下一步继续生成View层

注意一下上面红色边框的位置!Scaffold template 选择 Create 应为咱演示的是添加一条数据,所以选择这个模板,当然它有CRUD 四个操作已经Empty,您不知道CRUD是什么没关系我给您说下:C - Create 创建 就是添加一条数据; R - Read 读取 就是查询一些数据; U - Update 更新 就是修改一条数据; D - Delete 删除 就是删除一条数据,它们四个单词就代表数据库常见的增删改查四个操作。
下一步看下View层生成的代码

 1 @model Mvc3App1.Models.Person
 2
 3 @{
 4     ViewBag.Title = "Create";
 5 }
 6
 7 <h2>Create</h2>
 8
 9 <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
10 <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
11
12 @using (Html.BeginForm()) {
13     @Html.ValidationSummary(true)
14     <fieldset>
15         <legend>Person</legend>
16
17         <div class="editor-label">
18             @Html.LabelFor(model => model.IdCard)
19         </div>
20         <div class="editor-field">
21             @Html.EditorFor(model => model.IdCard)
22             @Html.ValidationMessageFor(model => model.IdCard)
23         </div>
24
25         <div class="editor-label">
26             @Html.LabelFor(model => model.Name)
27         </div>
28         <div class="editor-field">
29             @Html.EditorFor(model => model.Name)
30             @Html.ValidationMessageFor(model => model.Name)
31         </div>
32
33         <div class="editor-label">
34             @Html.LabelFor(model => model.Sex)
35         </div>
36         <div class="editor-field">
37             @Html.EditorFor(model => model.Sex)
38             @Html.ValidationMessageFor(model => model.Sex)
39         </div>
40
41         <div class="editor-label">
42             @Html.LabelFor(model => model.Age)
43         </div>
44         <div class="editor-field">
45             @Html.EditorFor(model => model.Age)
46             @Html.ValidationMessageFor(model => model.Age)
47         </div>
48
49         <p>
50             <input type="submit" value="Create" />
51         </p>
52     </fieldset>
53 }
54
55 <div>
56     @Html.ActionLink("Back to List", "Index")
57 </div>

好就近原则分析一下下面的几行代码吧!
  第42行 @Html.LabelFor(model => model.Age)  这个html helper 的作用就是显示刚才咱再Model层里指定的DisplayName(“年龄”) 这个特性的值。
   第45行 @Html.EditorFor(model => model.Age) 这个会生成一个文本框,文本框的值就是您在Person类里面对其属性的默认值 比如int的默认值是0 
   第46行 @Html.ValidationMessageFor(model => model.Age) 就是读取验证信息啦!!!!呵呵

最后看一下运行结果吧!

时间: 2024-09-28 22:49:02

Model验证的相关文章

ASP.NETMVC Model验证(四)

ASP.NETMVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而ModelValidator类型则是Model验证执行类型,在下面的示例中会使用Model验证提供程序结合Model验证执行类型来执行Model验证,就是使用上个篇幅中所讲的实现个Model绑定器继承自DefaultModelBinder类型,在自定义Model绑定器中使用ModelValidator类型.

ASP.NET MVC Model验证(二)

ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决 这个问题的,并且会描述一下ModelValidator类型对象相关的类型. Model验证 Model验证简单运用示例 ModelValidator使用生成过程 自定义实现DefaultModelBinder进行验证 自定义ModelValidatorProvider 和ModelValidator  Validation

ASP.NET MVC Model验证(一)

ASP.NET MVC Model验证(一) 前言 前面对于Model绑定部分作了大概的介绍,从这章开始就进入Model验证部分了,这个实际上是一个系列的Model的绑定往往都是伴随着验证的.也会在后面的篇幅中讲解MVC框架中Model验证的机制,以及一些Model验证的方式讲解,本章只是一个简单的示例篇幅,对于有基础的朋友可以直接跳过了(不能耽误大家时间). Model验证 Model验证简单运用示例 ModelValidator使用生成过程 自定义实现DefaultModelBinder进行

Mvc model验证总结

Model 验证总结 Model 验证总结 1 一.Model 验证标记 1 1.启用客户端验证: 1 2.在 Model 中加入验证标记 2 3 . Model 类中可以添加的验证标记: 3 3.1.必填字段 3 3.2 . 字段长度 3 3.3 . 正则验证 3 3.4.范围 4 3.5.服务端参与的验证 4 3.6.比较 4 3.7.自定义错误消息 5 4.后台 Action 的写法 6 5 . 最后附上常用正则表达式(网上找的) 7 二. Model 验证标记实例: 9 1 .  实例一

ASP.NET MVC Model验证(三)

ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的Model验证是在哪个具体的方法中来执行的,本篇的主题就是模拟一下默认的实现,自定义个Model绑定器继承自DefaultModelBinder类型,并且重写某些个重要的方法. Model验证 Model验证简单运用示例 ModelValidator使用生成过程 自定义实现DefaultModelBi

model验证——remote服务端验证

项目中做的项目使用的mvc的model验证,感觉最难的一个是remote验证,其它的比较简单就不说了: remote验证例子: /// <summary> /// ErrorMessage 表示验证不通过时显示的消息 ///AdditionalFields 表示验证的时候用哪个字段作为参数来传递(通常用于编辑页面的时候验证) /// </summary> [Remote("actionName", "controllerName", Erro

ASP.NET MVC Model验证学习—上

蒋大师的MVC框架解析确实是越学越有趣,即使是跟着学写些示例代码也是收获良多,尤其是关于类型.反射和委托等方面,平时在应用开发中确实很少会有机会写这样的代码.今天学习的ASP.NET MVC中的Model的验证,刚开时会以为这一章会比较简单,因为之前已经学习过了Model元数据的解析.Model绑定,Model的验证可能就只是DataAnnotation相关类的介绍.但实际学习的过程中,尤其是自定义用于修饰Action的验证特性让我到现在仍然感觉是比较萌萌哒,毕竟这一块对于框架的扩展基本上涉及到

ASP.NET MVC Model验证(四)

ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而ModelValidator类型则是Model验证执行类型,在下面的示例中会使用Model验证提供程序结合Model验证执行类型来执行Model验证,就是使用上个篇幅中所讲的实现个Model绑定器继承自DefaultModelBinder类型,在自定义Model绑定器中使用ModelValidator类型

ASP.NET MVC3中Model验证

原文:ASP.NET MVC3中Model验证 概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证. 本节我们就学习如何使用 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证. 这些特性用于定义常见的验证模式,例如范围检查和必填字段.而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使

ASP.NET MVC3 Model验证总结

原文:ASP.NET MVC3 Model验证总结 http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的. 我们要做的只是给Model类的各属性加上对应的验证标记(Attributes)就可以让MVC3框架帮我们完成验证.我以MVC3项目模板自带的登