ASP.NET MVC 服务端自定义验证与客户的验证

实体类:

public class User

    {

        publicintUserId { get; set; }

        [Required(ErrorMessage="请输入用户名",AllowEmptyStrings=false)]

        [UserNameHeadIsRight(ErrorMessage="用户名必须以恋尚屋haocute.taobao.com开头")]//下面讲述的就它了

        publicStringUserName { get;set; }

         [Required]

        [DataType(DataType.Password)]

        publicStringPassword { get;set; }

         [Required]

        [Compare("Password",ErrorMessage="密码不一致")]

        [DataType(DataType.Password)]

        publicStringPassword2 { get;set; }

         [Required]

         [DataType(DataType.EmailAddress,ErrorMessage="邮箱格式错误")]

        publicStringEmail { get;set; }

         [Required]

        publicStringSex { get; set; }

        

        publicintProvince { get; set; }

         [Required]

        publicDateTimeRegDate { get;set; }

}

 

 

1.服务端验证:

 服务端验证验证采用.NET 的特性attribute类来实现验证,自带的验证如Required和Compare等 

 要对服务的实现自定义的验证需要继承:ValidationAttribute

 要对客户的实现自定义验证要实现接口:IClientValidatable

 如验证注册时验证用户名是否以"恋尚屋haocute.taobao.com"开头的

public class UserNameHeadIsRightAttribute:ValidationAttribute,IClientValidatable

    {

       /// <summary>

       /// 服务端验证用户名是否已经存在,且以cys开头的用户名

       /// </summary>

       /// <paramname="value"></param>

       /// <returns></returns>

        public override bool IsValid(object value)

        {

            if(value!=null&&value.toString().indexOf("恋尚屋haocute.taobao.com")!=0){

             return false;

             }

           return true;

        }

        

 /// <summary>

        /// 提供客户端的验证根据:data-val-usernameusable="用户名必须以恋尚屋haocute.taobao.com开头" data-val-usernameusable-value="恋尚屋haocute.taobao.com"

        /// </summary>

        /// <paramname="metadata"></param>

        /// <paramname="context"></param>

        /// <returns></returns>

        publicIEnumerable<ModelClientValidationRule>GetClientValidationRules(ModelMetadatametadata, ControllerContextcontext)

        {

            varvalidationRule = newModelClientValidationRule()

            {

                 ErrorMessage="用户名必须以恋尚屋haocute.taobao.com开头", 

     ValidationType="usernameusable"

            };

           validationRule.ValidationParameters.Add("value","恋尚屋haocute.taobao.com");//该值可以在客户端获取到

            yield return validationRule;

        }

    }

 

//客户端使用

 

//usernameheadisright这个名词对应的是UserNameHeadIsRight但在客户端微软要求必须用小写

<head>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

<script type="text/javascript">

$.validator.addMethod('usernameheadisright', function(value, element, params) {

        if(value.indexOf(params.value) == 0) {//params.valuse=="恋尚屋haocute.taobao.com"

            //这里还可以进行AJAX判断

            return true;

        }

        else{

            return false;

        }

    });

//附上值和错误信息

    $.validator.unobtrusive.adapters.add("usernameusable", ['value'], function(options) {

        options.rules["usernameusable"]= {

            value: options.params.value

        };

        //       options.message["usernameusable"] = options.message;

        options.messages["usernameusable"] = options.message;

    });

</script>

</head>

<body>

    用户名: @Html.TextBoxFor(user=>user.UserName) @Html.ValidationMessageFor(user=>user.UserName)

</body>

 

posted @ 2015-03-12 20:19  yisic  阅读(153)  评论(0)    收藏  举报