在ASP.NET MVC3的验证框架比MVC2要改进不少,下面做下简单的介绍:
Server端验证
自定义Server端的validation属性,需要继承自ValidationAttribute,主要方法就是重载IsValid方法。IsValid的方法有两个;
IsValid(Object value)
IsValid(Object value, ValidationContext validationContext)
第一个是比较常用的方法,即取到当前field的值;第二个比较特殊,它还传送了这个field的上下文,通过这个上下文,可以取到这个class中的其他field,例如:
PropertyInfo property = validationContext.ObjectType.GetProperty(“fieldName”);
非常的好用,非常的强大(在MVC2中,只有把属性加在model class上才可以实现password和confirm password之间的比较,如今直接把属性加在cofirm password上就可以实现了^_^)。
Client验证
Client验证主要是个这个field添加验证规则的名称和传递一系列的参数,然后将这个属性添加到前台的html元素中,结合javascript来进行客户端的验证。要自定义Client端的验证规则,需继承IClientValidatable接口。
实现方法:
public IEnumerable<ModelClientValidationRule> GetClientValidationRules( ModelMetadata metadata, ControllerContext context)
这个方法的返回值是可枚举的 ModelClientValidationRule ;换言之,这是个获取客户端验证规则的接口,自定义验证规则,需要从 ModelClientValidationRule 继承派生类。
ModelClientValidationRule 有3个重要的property:
- ErrorMessage : String
- ValidationParameters : IDictionary<String, Object>
- ValidationType : String
ErrorMessage不用说了,就是错误消息;
ValidationParameters,是一个hash表,key就是参数的名称,value中存参数的值;
ValidationType,这个东西是和前台的javascript相对应的,.NET MVC3默认用的是jQuery.validation,所以ValidationType的值还需要和其中的验证方法相对应,在自定义验证规则后,还需要在前台添加对应的javascript,将自定义的验证的方法加入了jQuery.validation插件中。