<!DOCTYPE html>
MVC 自定义Attribute 服务端校验 客户端校验自定义AOP标签
vs已经完成部分Attributte 如:Required,表示该值为必须的,[EmailAddress]表面该为邮箱地址 在属性上直接上标签即可验证是否满足该属性 若需要自定义标签则可以自定义类继承自ValidationAttribute,重载IsVaild,在里面写入验证语句即可
如:自定义一个IDNumberAttribute,用于验证是否为合法身份证
public class IDNumberAttribute : ValidationAttribute, IClientValidatable{ public override bool IsValid(object value) { string idnumber = value.ToString(); if (string.IsNullOrEmpty(idnumber)) return true;//为空表示不验证,直接返回,属性只有加入Required标签才验证是否为空,这里只验证是否满足格式 if (idnumber.Length != 15 || idnumber.Length != 18)//身份证为15或18位 { return false; } if ((char.ToLower(idnumber[idnumber.Length - 1]) == 'x' &&idnumber.Substring(0,idnumber.Length-1).All(s=>char.IsDigit(s))) ||idnumber.All(s=>char.IsDigit(s))) { return true; } return false; }}
PS:这里只是简单的验证格式 至此这里就定义好了,验证:
[IDNumber] public string IDNumber{get;set;}
若需要加入客户端校验 只需实现IClientValidatable接口,
public IEnumerableGetClientValidationRules(ModelMetadata metadata, ControllerContext context){ return new List { new ModelClientValidationRule{ ValidationType = "IDNumber", ErrorMessage = "请输入正确的身份证号" } }};
同时需要确认开启了客户端校验 ,在web.config 的appsetting节点下加入 <add key="ClientValidationEnabled" value="true">
<add key="UnobtrusiveJavaScriptEnabled" value="true">
在网页写入@Html.ValidationSummary()
就能客户端校验了