ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的
在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.unobtrusive.js异步验证的全过程。
在jquery.validate.unobtrusive.js文件的尾部看到了如下的一个调用:
$(function () {$jQval.unobtrusive.parse(document);});
可见,通过把当前页的document对象传给$jQval.unobtrusive.parse方法,使该页的表单元素能被异步验证。parse方法的主要作用是对所有的表单进行异步验证。
{parse: function (selector) {$(selector).find(":input[data-val=true]").each(function () {$jQval.unobtrusive.parseElement(this, true);});var $forms = $(selector).parents("form").andSelf().add($(selector).find("form")).filter("form");$forms.each(function () {var info = validationInfo(this);if (info) {info.attachValidation();}});}}
以上,首先遍历data-val=true的input元素,调用$jQval.unobtrusive.parseElement方法,把存在于html元素中的、有关异步验证的信息抓取出来封装成jquery.validate.unobtrusive.js能识别的元数据。$jQval.unobtrusive.parseElement方法的第一个参数表示被验证的表单元素。第二个参数为true时,表示跳过对表单元素的验证,如果只验证一个元素就设置成true,如果验证多个元素就设置成false,默认为false。
在validationInfo这个对象中,包含了异步验证所需要的一切信息,当调用attachValidation方法的时候,就会把封装在validationInfo对象中的所有验证规则传给validate方法。
有关validationInfo的细节:
data_validation = "unobtrusiveValidation";function validationInfo(form) {var $form = $(form),result = $form.data(data_validation),onResetProxy = $.proxy(onReset, form);if (!result) {result = {options: { // options structure passed to jQuery Validate's validate() methoderrorClass: "input-validation-error",errorElement: "span",errorPlacement: $.proxy(onError, form),invalidHandler: $.proxy(onErrors, form),messages: {},rules: {},success: $.proxy(onSuccess, form)},attachValidation: function () {$form.unbind("reset." + data_validation, onResetProxy).bind("reset." + data_validation, onResetProxy).validate(this.options);},validate: function () { // a validation function that is called by unobtrusive Ajax$form.validate();return $form.valid();}};$form.data(data_validation, result);}return result;}
以上,在validationInfo的构造函数中,通过$form.data方法,可以获取或设置unobtrusiveValidation的值。在unobtrusiveValidation这个对象中,包含了异步验证所需要的信息:
1、名为options的json对象,包含了验证规则、错误信息等。
2、attachValidation方法用来给form绑定自定义事件,每次调用或解除reset.unobtrusiveValidation方法都会调用onReset方法。
function onReset(event) { // 'this' is the form elementvar $form = $(this);$form.data("validator").resetForm();$form.find(".control-group").removeClass("error");$form.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors");$form.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*") // If we were using valmsg-replace, get the underlying error.removeData("unobtrusiveContainer");}
3、validate表示可以自定义验证事件。
而在把validationInfo对象中的所有验证规则传给validate方法的时候,真正起作用的是$.validator.unobtrusive.adapters,这样html中以data-*开头的才能被validate方法读懂。如果需要自定义异步验证规则,需要通过jQuery.validator.unobtrusive.adapters.add(adapterName, [params], function(element, form, message, params, rules,messages){})方法来实现。
其中,adapterName与data-val-ruleName中的ruleName匹配。通过adapter可以扩展如下:
jQuery.validator.unobtrusive.adapters.addBool(adapterName, [ruleName]);jQuery.validator.unobtrusive.adapters.addSingleVal(adapterName, attribute, [ruleName]);jQuery.validator.unobtrusive.adapters.addMinMax(adapterName, minRuleName, maxRuleName, minMaxRuleName, [minAttribute, [maxAttribute]]);
ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的的更多相关文章
- ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建
在上一篇"ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式.错误信息提示.validate方法的背后"中,了解了jQuery如何验证,如何显示错误信息,本篇要 ...
- ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后
ASP.NET MVC借助jQuery的验证机制,提供了一套从客户端到服务端异步验证的解决方案,通常情况下,用起来相当方便.但面对一些相对特殊的情况,可能会遇到验证失效的场景,比如在使用ajax动态异 ...
- jQuery validate 根据 asp.net MVC的验证提取简单快捷的验证方式(jquery.validate.unobtrusive.js)
最近在学习asp.netMVC,发现其中的验证方式书写方便快捷,应用简单,易学好懂. 验证方式基于jQuery的validate 验证方式,也可以说是对jQuery validate的验证方式的扩展, ...
- .net MVC内置js验证 jquery.validate.unobtrusive.js重置验证操作(备忘,找了很多次了)
(function ($) { $.validator.unobtrusive.parseDynamicContent = function (selector) { //use the normal ...
- asp.net mvc model attribute and razor and form and jquery validate 完美结合
1.创建Model,添加标注. [Serializable] public class BaseUserModel:BaseModel { [StringLength(100)] [Required( ...
- 改写jquery.validate.unobtrusive.js实现气泡提示mvc错误
个人对于这个js.css不是很擅长,所以这个气泡提醒的样式网上找了下,用了这个http://www.cnblogs.com/wifi/articles/2918950.html当中的第一种写法. 对于 ...
- jquery.validate.unobtrusive.js实现气泡提示mvc错误
改写jquery.validate.unobtrusive.js实现气泡提示mvc错误 个人对于这个js.css不是很擅长,所以这个气泡提醒的样式网上找了下,用了这个http://www.cnblog ...
- MVC3.0修改jquery.validate.unobtrusive.js实现气泡提示mvc错误
CSS部分 <style type="text/css"> .hide {display:none;} .poptip { position: absolute; to ...
- ASP.NET MVC - 模型验证
ASP.NET MVC - 模型验证(Model verification) 模型验证原理浅析 模型验证用到了模型绑定器.模型验证器(System.Web.Mvc.DataAnnotationsMod ...
随机推荐
- 详解PHP的执行原理和流程
简介 先看看下面这个过程: • 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的: • PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程 ...
- jQuery-属性操着
jquery属性操作分为属性操作,CSS类操作,HTML代码/文本/值操作 一:属性 使用 说明 例子 attr(name|pro|key,val|fn) 设置或返回被选元素的属性值, # 专门用于做 ...
- JS实现文本中查找并替换字符
JS实现文本中查找并替换字符 效果图: 代码如下,复制即可使用: <!DOCTYPE html><html> <head> <style type=" ...
- 【转载】redis容灾策略
版权声明:转载请注明出处 http://blog.csdn.net/irean_lau. https://blog.csdn.net/Irean_Lau/article/details/5136027 ...
- 微信小程序开发之IOS/Android兼容坑(持续更新)
一.时间转换问题: 这不只是小程序上面的问题是ios系统 都有这个问题就是new Date("2017-06-16") 在IOS会出现NAN的情况所以对于时间转换需要另行封装,解 ...
- Selenium Books
Recently, some of my projects rely heavily upon tests with selenium. Some books about selenium are c ...
- APIO2018酱油记
苟比主席树太难了学不会 还是把APIO几天的过程记下来吧...免得忘了 DAY -5 去CTSC的人都走了,机房好冷清...只有我.PSB.yasar.Chlience四个人 CSTC辣么难又辣么贵, ...
- 原生js返回顶部
let backToTop = function() { let scrollToptimer = setInterval(function() { let top = document.body.s ...
- rabbitMQ的安装(Windows下)
在公司接触到这一块,信息中间件的使用,在公司没有时间了解的更加深入,只是在简单的使用,这里将深入学习一番. 参考:http://blog.csdn.net/lu1005287365/article/d ...
- C语言中对数组名取地址
在C/C++中,数组名相当于一个指针,指向数组的首地址.这里“相当于”不代表等于,数组名和指针还是有很多区别的,这个在<C陷阱与缺陷>里有详尽的讲述.而这里要说的是对于数组名取地址的这么一 ...