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 特性的存在。本章后面部分将会讲解如何创建自定义注解。下面介绍如何在验证失败时创建自定义的错误提示消息。

posted on 2016-06-20 10:34  ylbtech  阅读(357)  评论(0编辑  收藏  举报