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>
浙公网安备 33010602011771号