自定义Attribute 服务端校验 客户端校验

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 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()就能客户端校验了

你可能感兴趣的:(attribute)