6.1.1 验证注解的使用
数据注解特性定义在名称空间System.ComponentModel.DataAnnotations 中(但接下来
将看到,有些特性不是定义在这个名称空间中)。它们提供了服务器端验证的功能,当在模
型的属性上使用这些特性之一时,框架也支持客户端验证。在名称空间DataAnnotations 中,
有4 个特性可以用来应对一般的验证场合。下面从Required 特性开始对它们逐一介绍。
1.Required 必须字段
[Required] public string FirstName { get; set; } [Required] public string LastName { get; set; }
2.StringLength 字符长度
[Required] [StringLength(160)] public string FirstName { get; set; } [Required] [StringLength(160)] public string LastName { get; set; }
[Required] [StringLength(160, MinimumLength=3)] public string FirstName {get; set;}
3.RegularExpression
[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")] public string Email { get; set; }
4.Range
Range 特性用来指定数值类型值的最小值和最大值。
[Range(35,44)] public int Age {get; set;}
该特性的第一个参数设置的是最小值,第二个参数设置的是最大值,这两个值也包含
在范围之内。Range 特性既可用于int 类型,也可用于double 类型。它的构造函数的另外
一个重载版本中有一个Type 类型的参数和两个字符串(这样就可以给date 属性和decimal
属性添加范围限制了)。
[Range(typeof(decimal), "0.00", "49.99")] public decimal Price {get; set;}
5. System.Web.Mvc 下的验证特性
ASP.NET MVC框架还为应用程序在名称空间System.Web.Mvc 中额外添加了两个验证
特性。其中一个是Remote 特性。Remote 特性允许利用服务器端的回调函数执行客户端的
验证逻辑。以MVC Music Store 中RegisterModel 类的UserName 属性为例,系统中不允许
两个用户具有相同的UserName 值,但是在客户端很难验证以确保UserName 属性值的唯
一性(除非把所有的用户名都从数据库传送到客户端)。使用Remote 特性可以把UserName
的值传到服务器,然后在服务器端的数据库中与相应的表字段值进行比较:
[Remote("CheckUserName", "Account")] public string UserName {get; set;}
在特性中可以设置客户端代码要调用的控制器名称和操作名称。客户端代码将自动把
用户输入的UserName 属性值发送到服务器,该特性的一个重载构造方法还允许指定要发
送给服务器的其他字段:
public JsonResult CheckUserName(string username) { var result = Membership.FindUsersByName(username).Count == 0; return Json(result, JsonRequestBehavior.AllowGet); }
上面的控制器操作将利用与UserName 属性同名的参数进行验证,并返回一个封装在
JavaScript Object Notation(JSON)对象中的布尔类型值(true 或false)。第8 章将会对JSON、
AJAX 和其他客户端特征进行详细介绍。
第二个是Compare 特性,它用于确保模型对象的两个属性拥有相同的值。例如,为了
避免顾客输入错误,往往要求输入两次e-mail 地址:
[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")] public string Email { get; set; } [Compare("Email")] public string EmailConfirm { get; set; }
是由于数据注解的可扩展性,才导致了Remote 和Compare 特性的存在。本章后面部分将会讲解如何创建自定义注解。下面介绍如何在验证失败时创建自定义的错误提示消息。