Asp.net MVC源码分析--Model Validation(Client端)实现(2)
上一篇我们介绍了如果输出Client Validation 信息到浏览器,下面我们来分析一个MVC是如果实现JavaScript验证的。
一.TextFor 输出的Html文本
先来看一下标记了[Required] attribute的属性通过TextFor输出的Html代码:
<input data-val="true" data-val-required="The User name field is required." id="UserName" name="UserName" type="text" value="" class="valid">
复制代码
• data-val:是否需要客户端验证
• data-val-required:验证类型和错误消息
二.jquery.validate.unobtrusive.js的实现
1.unobtrusive 自定义验证规则
1 var $jQval = $.validator,
2 adapters,
3 data_validation = "unobtrusiveValidation";
复制代码
我们看到$jQval对象其实就是$.validator对象。
1 $jQval.unobtrusive = {
2 adapters: [],
3
4 adapters = $jQval.unobtrusive.adapters;
5 adapters.add = function (adapterName, params, fn) {
6 if (!fn) { // Called with no params, just a function
7 fn = params;
8 params = [];
9 }
10 this.push({ name: adapterName, params: params, adapt: fn });
11 return this;
12 };
13
14 adapters.add("required", function (options) {
15 if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") {
16 setValidationValues(options, "required", true);
17 }
18 });
19 }
复制代码
上面代码第10行,我们看到unobtrusive把所有与MVC相关的验证规则都放到了$jQval.unobtrusive.adapters(Array)对象中. 那么这些验证规则如果被Jquery调用的呢?我们接着来看.
2.用Adapter模式与Jquery集成
下面我们看一下jquery.validate.unobtrusive.js的实现,当初始化时调用了$jQval.unobtrusive.parse方法请注意上面第42行,unobtrusive只对data-val设置为true的input控件进行验证 。
1 $(function () {
2 $jQval.unobtrusive.parse(document);
3 });
4
5 function validationInfo(form) {
相关新闻>>
- 发表评论
-
- 最新评论 更多>>