自定义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 IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
return new List<ModelClientValidationRule>
{
new ModelClientValidationRule{
ValidationType = "IDNumber",
ErrorMessage = "请输入正确的身份证号"
}
}
};
同时需要确认开启了客户端校验 ,在web.config 的appsetting节点下加入
<add key="ClientValidationEnabled" value="true">
<add key="UnobtrusiveJavaScriptEnabled" value="true">
在网页写入@Html.ValidationSummary()
就能客户端校验了
每天收获一点点