观察由ASP.NET TagHelper / HtmlHelper生成的表单元素:
<input type="text" data-val="true" data-val-required="* 必须填写" id="Register_UserName" name="Register.UserName" value="">
以及他们相应的错误消息元素:
<span class="field-validation-valid" data-valmsg-for="Register.UserName" data-valmsg-replace="true"></span>
为什么会有这些以 data-val 开头的属性呢?
为了集成服务器/客户端验证,微软基于validate开发出jquery.validate.unobtrusive.js插件(以下简称unobtrusive)。
生成的form表单元素中data-开头的属性,都是为unobtrusive准备的。unobtrusive利用:
还可以有验证参数,比如使用[MinLength(4)]之后,会有属性:
data-valmsg-for="inputname"等也是类似的作用。
然后,unobtrusive根据以上属性自动设定rule并进行验证,于是开发人员就不用再:
$("form").validate();
演示:在HTML页面再引入unobtrusive(一样要注意引入顺序,必须在validate之后),不需要任何额外的代码,就能实现验证效果。
而且,因为unobtrusive实际上应用了validate,所以validate中存在的方法,unobtrusive页面一样可以使用,比如:
$('form').valid() //再验证form表单一次
一些特殊的情况下,我们可能还要利用unobtrusive实现自定义的验证。尤其是验证需要不止一个元素的时候,比如:
$.validator.addMethod("creditEnough", function (value, element, param) {
return this.optional(element) || //element的值不为空时才触发验证 parseInt(value) <= parseInt($(param).text());
}, "* 出售的帮帮币大于可出售帮帮币");
添加adapter
$.validator.unobtrusive.adapters.add("enough", ["id"], function (options) { //options.rules["enough"] = options.params.id; options.rules.enough = options.params.id; //options.messages["enough"] = options.message; options.messages.enough = options.message; })
因为缺乏对unobtrusive的全面认识,从逻辑上看有些难以理解,
要生成一个rule:credit=""
options.rules 的效果
禁用某项比如:据实结算即不需要填写帮帮币了
$(form).removeData("validator")
$.validator.unobtrusive.parse();
代码触发验证
$form.valid() $.validator.unobtrusive.parse('#yourFormSelector');
参考“一起帮”,给之前的Form表单,添加验证
多快好省!前端后端,线上线下,名师精讲
更多了解 加: