上一篇文章我们演示了通过对jquery.validate.unobtrusive.js做点小修改,如何给MVC的验证添点花

主要还是修改了onError与onSuccess中的这两个方法

这两个方法也是用来显示/隐藏验证信息的关键代码

我根据自己的理解,把这两个方法加上了详细的中文注释

请大家多多指正:

 //每次执行完验证的时候,都会来这里(不论成功或失败)
//在这里可以控制验证提示消息的显示或隐藏
//error:包含验证提示消息的标签,是一个Jquery对象
//如果验证通过的话是这样子:<span for="UserCode" generated="true"></span>
//如果验证通过的话是这样子:<span for="UserCode" generated="true">UserCode 字段是必需的。</span>
//inputElement:当前被验证的input控件
function onError(error, inputElement) { // 'this' is the form element
//首先查到显示验证提示信息的容器,
//一般是这样子:<span class="field-validation-valid" data-valmsg-for="UserCode" data-valmsg-replace="true"></span>
//replace:这个值用来判断容器内的值是否需要被替换
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
replaceAttrValue = container.attr("data-valmsg-replace"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null; //显示容器
container.removeClass("field-validation-success field-validation-valid").addClass("field-validation-error"); //把容器跟本次的验证提示信息关联起来(success中会用到)
error.data("unobtrusiveContainer", container); if (replace) {
//清空容器内容,
container.empty();
//然后把本次的提示信息添加到容器中,并清除提示信息的class
//注意:如果验证通过的话,还会调用success方法,在success方法中会清空container
error.removeClass("input-validation-error").appendTo(container);
}
else {
//不清空容器,只是隐藏容器中的验证提示信息
error.hide();
}
}
//验证通过后,来这里
//error:验证通过后的提示信息,其实就是<span for="UserCode" generated="true"></span>,跟onError中上的error是同一个东西
function onSuccess(error) { // 'this' is the form element //获取容器(在onError中已经放进error.data中了)
var container = error.data("unobtrusiveContainer"),
replaceAttrValue = container.attr("data-valmsg-replace"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null; if (container) {
//隐藏容器
container.addClass("field-validation-success").removeClass("field-validation-error field-validation-valid"); //移除容器跟提示信息的关联
error.removeData("unobtrusiveContainer"); if (replace) {
//清除容器
container.empty();
}
}
}

上面有个变量replace变量我没有解释,现在在这里单独说一下:

我们在view中用@Html.ValidationMessageFor方法生成显示验证消息的容器时,注意一下第二个参数

如果不带第二个参数

@Html.ValidationMessageFor(model => model.UserCode)

生成的html是这样子的,这是一个空容器

<span class="field-validation-valid" data-valmsg-for="UserCode" data-valmsg-replace="true"></span>

如果传入第二个参数

@Html.ValidationMessageFor(model => model.UserCode, "请输入用户名")

生成的htm是这样子的,不再是空容器了,在验证不通过的时候,会直接显示容器里面的信息而忽略Model中定义的验证信息

<span class="field-validation-valid" data-valmsg-for="UserCode" data-valmsg-replace="false">请输入用户名</span>

现在一目了然了吧.

小修改,让mvc的验证锦上添点花(2)的更多相关文章

  1. 小修改,让mvc的验证锦上添点花(1)

    首先,mvc的客户端验证用的是jquery.validate.js, jquery.validate本身已经提供了很好的扩展功能,通过简单点配置就可以做得更好看些. 而Microsoft通过jquer ...

  2. 小修改,让mvc的验证锦上添点花

    首先,mvc的客户端验证用的是jquery.validate.js, jquery.validate本身已经提供了很好的扩展功能,通过简单点配置就可以做得更好看些. 而Microsoft通过jquer ...

  3. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  4. 当ASP.NET MVC模型验证遇上CKEditor

    项目需要,使用到了CKEditor编辑器.这是个很不错的富文本编辑器,但是当它绑定的字段需要进行模型验证的时候,却会出现验证失效的问题.因此本文旨在记录这个问题和给出解决办法.以下以Validatio ...

  5. mvc的验证

    mvc的验证锦上添点花(2) 上一篇文章我们演示了通过对jquery.validate.unobtrusive.js做点小修改,如何给MVC的验证添点花 主要还是修改了onError与onSucces ...

  6. MVC客户端验证的小示例

    MVC客户端验证的小示例 配置客户端验证的可用性: <configuration> <appSettings>  <add key="ClientValidat ...

  7. MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息

    Asp.net MVC中的提供非常简单易用的数据验证解决方案. 通过System.ComponentModel.DataAnnotations提供的很多的验证规则(Required, StringLe ...

  8. ASP.NET MVC Model验证(五)

    ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...

  9. 我只知道一点非常简单的关于MVC的验证

    我只知道一些非常简单的关于MVC的验证 如题,我只知道一点非常简单的关于MVC的验证,所以如果您接触过MVC的验证,相信也就不用看了,这个且当作是学习笔记吧. 先小讲解一下他基本的五个从Model里打 ...

随机推荐

  1. linux查看电脑硬件配置

    1. 查看CPU cat /proc/cpuinfo 2. 查看内存 free -m 3. 查看硬盘分区 fdisk -l 4. 查看网卡信息或者ip地址 ifconfig 5. 查看详细的网卡工作模 ...

  2. centos7 端口开放

    CentOS升级到7之后,发现无法使用iptables控制Linuxs的端口,google之后发现Centos 7使用firewalld代替了原来的iptables.下面记录如何使用firewalld ...

  3. Kafka如何保证数据不丢失

    Kafka如何保证数据不丢失 1.生产者数据的不丢失 kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到,其中状态有0,1,-1. 如果是 ...

  4. c++之带默认形参值的函数

    先来个例子: #include <iostream> using namespace std; ,){ return x+y; } int main(){ //freopen(" ...

  5. 无法修改SQL Server 服务名称

    之前安装数据库的时候,默认的是机器名A,然后装完后我设置过数据库发布即[复制]里面的[本地发布] 后来我又把机器名改了,但是平时登陆数据库都是用ip登陆的 今天我要设置一个新的发布,但是发现只能用实例 ...

  6. 我理解的MVCC内部实现原理

    MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lo ...

  7. Visula Studio 2013 初始化静态浮点型数据在C++类内

    class MyClass { private: static const int intvalue= 50; static const float floatvalue = 0.07f; }; 如上 ...

  8. Windows查看端口占用及杀掉进程

    "到底是谁占用了80端口,该怎么查,怎么终止它?",这里就简单讲解一下,在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等.这里主要是用到windows下的D ...

  9. vim全局替换命令-乾颐堂

    语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:“1,20” :表示从第1行到2 ...

  10. myeclipse的user library使用方法

    让myeclipse形成一个整齐划一的jar集合 这里就使用到了编辑器的user Library功能 首先,打开编辑器然后如图操作window--->preference--> 点开后如图 ...