在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
ASP.NET MVC 对于model属性的验证分为客户端和服务端的验证,客户端的验证则是使用jquery validate来进行验证。可以发现需要验证的控件它的HTML代码生成后会有一些以data-val-为前缀属性,如: <input type="text" name="Name" id="Name" data-val-required="姓名 字段是必需的。" data-val="true"/>
data-val="true"表示对用户输入的值进行验证,其它以data-val-为前缀的属性用来设置验证的规则和与其相关的属性。data-val-required表示非空验证,data-val-number表示该项只能输入数字。可以看到后面的规则名称跟jquery validate是一致的。jquery validate默认校验规则: 然而不同的是ASP.NET MVC 在validate的基础上套了一层。 通过引入jquery.validate.unobtrusive.js文件就能解析data-val-后面属性的含义。 IClientValidatable通过IClientValidatable接口就可以返回添加了data-val的自定义属性,它返回的类型是ModelClientValidationRule public class ModelClientValidationRule { //不能通过验证要显示错误提示 public string ErrorMessage { get; set; } //最终要生成的属性就是通过这个属性注册的 public IDictionary<string, object> ValidationParameters { get; } //自定义验证规则的名称 public string ValidationType { get; set; } }
比如下面是一个验证输入的值不能和某个特定值相等的验证规则 public class NotEqualAttribute : ValidationAttribute, IClientValidatable { public NotEqualAttribute(string NotEqualValue) { this.NotEqualValue = NotEqualValue; } public override string FormatErrorMessage(string name) { return string.Format("{0}不能够等于 {1}",name,NotEqualValue); } public string NotEqualValue { get;private set; } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var validationRule = new ModelClientValidationRule { ErrorMessage=FormatErrorMessage(metadata.DisplayName), ValidationType="notequal", }; validationRule.ValidationParameters.Add("value", NotEqualValue); yield return validationRule; } } 所有的验证都要继承ValidationAttribute这个特性类,可以重写IsValid方法来做服务器端的验证
public class Person { [DisplayName("姓名")] [Required] [NotEqual("abcd")] public string Name { get; set;} }
最终页面得到的HTML代码如下 <input type="text" value="" name="Name" id="Name" data-val-required="姓名 字段是必需的。" data-val-notequal-value="abcd" data-val-notequal="姓名不能够等于 abcd" data-val="true" class="text-box single-line"> 注册客户端验证最后需要在客户端添加js代码还进行输入是否合法性的验证工作,代码如下 $.validator.addMethod('notequal', function (value, element, params) { return value != params['value']; }); $.validator.unobtrusive.adapters.add("notequal", ['value'], function (options) { options.rules["notequal"] = { value:options.params.value }; options.messages["notequal"] = options.message; });
我想上面一段应该是向客户端添加验证的逻辑,下面一段应该是给相关的参数赋值,赋值分为两部分:1.给rule添加参数 2.给message添加提示信息 [代码下载] |
请发表评论