ASP.NET MVC借助jQuery的验证机制,提供了一套从客户端到服务端异步验证的解决方案,通常情况下,用起来相当方便。但面对一些相对特殊的情况,可能会遇到验证失效的场景,比如在使用ajax动态异步加载视图的时候。所以,有必要了解其背后运行的原理。首先从了解jQuery验证开始。本篇主要包括:

● jQuery验证的各种方式
● 错误信息是如何显示的
● 调用validate方法的背后发生了什么?

jQuery验证的各种方式

□ 通过class属性值实施验证规则

使用jQuery对表单元素进行验证,一种做法是通过为表单元素添加class属性值实现的。

如果想对jQuery验证汉化,可通过NuGet安装jQuery.Validation.Localization
Install-Package jQuery.Validation.Localization

  1. <form>
  2.  
  3.     <input id="Name" name="Name" type="text" class="required"/>
  4.  
  5.     <hr/>
  6.  
  7.     <input type="submit" value="提交"/>
  8.  
  9. </form>
  10.  
  11. @section scripts
  12.  
  13. {
  14.  
  15.     <script src="~/Scripts/jquery.validate.js"></script>
  16.  
  17.     <script src="~/Scripts/localization/messages_zh.js"></script>
  18.  
  19.     <script type="text/javascript">
  20.  
  21.         $(function() {
  22.  
  23.             $('form').validate();
  24.  
  25.         });
  26.  
  27.     </script>
  28.  
  29. }
  30.  

□ 通过$.validator.addClassRules方法自定义验证规则

通过 $.validator.addClassRules方法还可以自定义验证规则,然后把新的规则名作为表单元素class属性的值。

  1. <form>
  2.  
  3.     <input id="Name" name="Name" type="text" class="name" /><br/>
  4.  
  5.     <input id="z" name="z" class="zip" type="text"/>
  6.  
  7.     <hr/>
  8.  
  9.     <input type="submit" value="提交"/>
  10.  
  11. </form>
  12.  
  13. @section scripts
  14.  
  15. {
  16.  
  17.     <script src="~/Scripts/jquery.validate.js"></script>
  18.  
  19.     <script src="~/Scripts/localization/messages_zh.js"></script>
  20.  
  21.     <script type="text/javascript">
  22.  
  23.         $(function() {
  24.  
  25.             $.validator.addClassRules({
  26.  
  27.                 name: {
  28.  
  29.                     required: true,
  30.  
  31.                     minlength: 2
  32.  
  33.                 },
  34.  
  35.                 zip: {
  36.  
  37.                     required: true,
  38.  
  39.                     digits: true,
  40.  
  41.                     minlength: 5,
  42.  
  43.                     maxlength: 5
  44.  
  45.                 }
  46.  
  47.             });
  48.  
  49.             $('form').validate();
  50.  
  51.         });
  52.  
  53.     </script>
  54.  
  55. }
  56.  

□ 通过$.validator.addMethod自定义验证规则

  1. <form>
  2.  
  3.     <input id="e" type="text" name="firstName"/>
  4.  
  5.     <hr/>
  6.  
  7.     <input type="submit" value="提交"/>
  8.  
  9. </form>
  10.  
  11. @section scripts
  12.  
  13. {
  14.  
  15.     <script src="~/Scripts/jquery.validate.js"></script>
  16.  
  17.     <script src="~/Scripts/localization/messages_zh.js"></script>
  18.  
  19.     <script type="text/javascript">
  20.  
  21.         $(function () {
  22.  
  23.             $.validator.addMethod("notnumbers", function(value, element) {
  24.  
  25.                 return !/[0-9]*/.test(value);
  26.  
  27.             }, "不能输入数字");
  28.  
  29.             $('form').validate({
  30.  
  31.                 rules: {
  32.  
  33.                     firstName: {
  34.  
  35.                         notnumbers: true
  36.  
  37.                     }
  38.  
  39.                 }
  40.  
  41.             });
  42.  
  43.         });
  44.  
  45.     </script>
  46.  
  47. }
  48.  

□ 通过validate方法的json参数

通过validate方法的json参数,也可为表单元素设置验证规则。

  1. <form>
  2.  
  3.     <input id="e" type="text" name="userEmail"/>
  4.  
  5.     <hr/>
  6.  
  7.     <input type="submit" value="提交"/>
  8.  
  9. </form>
  10.  
  11. @section scripts
  12.  
  13. {
  14.  
  15.     <script src="~/Scripts/jquery.validate.js"></script>
  16.  
  17.     <script src="~/Scripts/localization/messages_zh.js"></script>
  18.  
  19.     <script type="text/javascript">
  20.  
  21.         $(function() {
  22.  
  23.             $('form').validate({
  24.  
  25.                 rules: {
  26.  
  27.                     userEmail: {
  28.  
  29.                         email: true,
  30.  
  31.                         required: true
  32.  
  33.                     }
  34.  
  35.                 }
  36.  
  37.             });
  38.  
  39.         });
  40.  
  41.     </script>
  42.  
  43. }
  44.  

□ 动态添加或删除验证规则

通过rules方法可以为表单元素动态添加验证规则。

  1. <form>
  2.  
  3.     <input id="e" type="text" name="userEmail"/>
  4.  
  5.     <hr/>
  6.  
  7.     <input type="submit" value="提交"/>
  8.  
  9. </form>
  10.  
  11. @section scripts
  12.  
  13. {
  14.  
  15.     <script src="~/Scripts/jquery.validate.js"></script>
  16.  
  17.     <script src="~/Scripts/localization/messages_zh.js"></script>
  18.  
  19.     <script type="text/javascript">
  20.  
  21.         $(function() {
  22.  
  23.             $('form').validate({
  24.  
  25.                 rules: {
  26.  
  27.                     userEmail: {
  28.  
  29.                         required: true
  30.  
  31.                     }
  32.  
  33.                 }
  34.  
  35.             });
  36.  
  37.             //为表单元素动态添加验证规则
  38.  
  39.             $('#e').rules('add', {
  40.  
  41.                 minlength: 2,
  42.  
  43.                 maxlength:5
  44.  
  45.             });
  46.  
  47.         });
  48.  
  49.     </script>
  50.  
  51. }
  52.  

通过rules方法可以为表单元素动态移除验证规则。

  1. <form>
  2.  
  3.     <input id="e" type="text" name="userEmail"/>
  4.  
  5.     <hr/>
  6.  
  7.     <input type="submit" value="提交"/>
  8.  
  9. </form>
  10.  
  11. @section scripts
  12.  
  13. {
  14.  
  15.     <script src="~/Scripts/jquery.validate.js"></script>
  16.  
  17.     <script src="~/Scripts/localization/messages_zh.js"></script>
  18.  
  19.     <script type="text/javascript">
  20.  
  21.         $(function() {
  22.  
  23.             $('form').validate({
  24.  
  25.                 rules: {
  26.  
  27.                     userEmail: {
  28.  
  29.                         required: true
  30.  
  31.                     }
  32.  
  33.                 }
  34.  
  35.             });
  36.  
  37.             //为表单元素动态添加验证规则
  38.  
  39.             $('#e').rules('add', {
  40.  
  41.                 minlength: 2,
  42.  
  43.                 maxlength:5
  44.  
  45.             });
  46.  
  47.             //为表单元素动态移除验证规则
  48.  
  49.             $('#e').rules('remove', 'minlength');
  50.  
  51.         });
  52.  
  53.     </script>
  54.  
  55. }
  56.  

错误信息是如何显示的

□ 通过messages对象

  1. <form>
  2.  
  3.     <input id="e" type="text" name="userEmail"/>
  4.  
  5.     <hr/>
  6.  
  7.     <input type="submit" value="提交"/>
  8.  
  9. </form>
  10.  
  11. @section scripts
  12.  
  13. {
  14.  
  15.     <script src="~/Scripts/jquery.validate.js"></script>
  16.  
  17.     <script src="~/Scripts/localization/messages_zh.js"></script>
  18.  
  19.     <script type="text/javascript">
  20.  
  21.         $(function() {
  22.  
  23.             $('form').validate({
  24.  
  25.                 rules: {
  26.  
  27.                     userEmail: {
  28.  
  29.                         required: true,
  30.  
  31.                         email: true
  32.  
  33.                     }
  34.  
  35.                 },
  36.  
  37.                 messages: {
  38.  
  39.                     userEmail: {
  40.  
  41.                         required: "*",
  42.  
  43.                         email: "哈哈,输入正确的email"
  44.  
  45.                     }
  46.  
  47.                 }
  48.  
  49.             });
  50.  
  51.         });
  52.  
  53.     </script>
  54.  
  55. }
  56.  

□ 通过$.validator.addMethod重写错误提示

通过$.validator.addMethod方法还可以为默认验证规则重写错误提示信息。

  1. <form>
  2.  
  3.     <input id="Name" name="Name" type="text" class="name" /><br/>
  4.  
  5.     <input id="z" name="z" class="zip" type="text"/>
  6.  
  7.     <hr/>
  8.  
  9.     <input type="submit" value="提交"/>
  10.  
  11. </form>
  12.  
  13. @section scripts
  14.  
  15. {
  16.  
  17.     <script src="~/Scripts/jquery.validate.js"></script>
  18.  
  19.     <script src="~/Scripts/localization/messages_zh.js"></script>
  20.  
  21.     <script type="text/javascript">
  22.  
  23.         $(function() {
  24.  
  25.             $.validator.addClassRules({
  26.  
  27.                 name: {
  28.  
  29.                     newrequired: true,
  30.  
  31.                     minlength: 2
  32.  
  33.                 },
  34.  
  35.                 zip: {
  36.  
  37.                     required: true,
  38.  
  39.                     digits: true,
  40.  
  41.                     minlength: 5,
  42.  
  43.                     maxlength: 5
  44.  
  45.                 }
  46.  
  47.             });
  48.  
  49.             $.validator.addMethod("newrequired", $.validator.methods.required, "我说这个字段必填");
  50.  
  51.             $('form').validate();
  52.  
  53.         });
  54.  
  55.     </script>
  56.  
  57. }
  58.  

□ 通过title属性值重写错误提示

通过表单元素的title属性值是重写错误提示最直接的做法。
<input id="z" name="z" class="zip" type="text" title="我是通过title设置的错误提示"/>

调用validate方法的背后发生了什么?

→通过表单事件触发验证

这些表单事件包括focusin, focusout, keyup, submit, click,这些事件是可以禁止的。

  1. $(".selector").validate({
  2.  
  3.   onfocusout: false,
  4.  
  5.      onkeyup: false,
  6.  
  7.      onclick: false,
  8.  
  9.     onsubmit: false
  10.  
  11. });

→获取validate对象,该对象包含了所有了验证规则和设置

可以通过如下方式获取validate对象。

var validator = $('.selector').data("validator");

→对各个表单元素进行验证

下一篇将试着去了解ASP.NET MVC异步验证的表单html元素是如何创建的。

ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后的更多相关文章

  1. ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建

    在上一篇"ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式.错误信息提示.validate方法的背后"中,了解了jQuery如何验证,如何显示错误信息,本篇要 ...

  2. ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的

    在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.uno ...

  3. asp.net mvc异步查询

    对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...

  4. c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作

    ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)    ...

  6. AngularJS 表单数据验证及错误信息提示

    一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...

  7. ASP.NET MVC和WebForm 轻松实现前端和后端的双重验证 jquery.validate+ValidationSugar

    上次不足的改进 可能上一个贴子给大家带来很多误解,所以我这次把DEMO完善了两个版本 [ASP.NET WEBFROM]和[ ASP.NET MVC] 修改了一些BUG,并且修改了一些细了 在上个贴子 ...

  8. 对于asp.net mvc异步查询

    如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合mvc实现一个产品列表的Demo. 问 ...

  9. ASP.NET MVC 学习7、为Model Class的字段添加验证属性(validation attribuate)

    Adding Validation to the Model ,在Model中添加数据验证 参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-star ...

随机推荐

  1. MAC连接安卓手机通过adb指令安装apk

    Android的apk可以通过adb命令来安装.在MAC电脑上,如果想通过命令行的方式给安卓手机安装apk,需要做以下操作: 一句话概括就是:将安卓SDK的adb命令添加到环境变量中,然后通过adb ...

  2. 002_CentOS-6.4-x86_64安装包的说明

    http://mirrors.sohu.com/centos/6.6/isos/x86_64/?qq-pf-to=pcqq.group //souhu镜像下载地址 0_README.txt 25-Oc ...

  3. html复习之标签整理

    <body>标签,网页上显示的内容放在这里开始学习<p>标签,添加段落<hx>标签,为网页添加标题加入强调语气,使用<strong>加粗和<em& ...

  4. Google-Guice入门介绍

    原地址:http://blog.csdn.net/derekjiang/article/details/7231490 一. 概述 Guice是一个轻量级的DI框架.本文对Guice的基本用法作以介绍 ...

  5. javascript-dom文档对象模型2

    每个标签都是一个对象 一:查找元素 1.直接查找 document.getElementById 根据ID获取一个标签 document.getElementsByName 根据name属性获取标签集 ...

  6. SP14932 【LCA - Lowest Common Ancestor】

    专业跟队形 唯一一个有$\LaTeX$的 裸的$LCA$,我用的是$Tarjan~LCA$,注意两点相同特判 #include<iostream> #include<cstdio&g ...

  7. 实操一下<python cookbook>第三版1

    这几天没写代码, 练一下代码. 找的书是<python cookbook>第三版的电子书. *这个操作符,运用得好,确实少很多代码,且清晰易懂. p = (4, 5) x, y = p p ...

  8. 003.iSCSI客户端管理

    一 启动器介绍 iSCSI启动器通常在软件中实施,也可以采用硬件启动器.软件启动器需要安装iSCSI-initiator-utils软件包.包含如下文件: /etc/iscsi/iscsid.conf ...

  9. html (第四本书第九章参考)

    上机1 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8 ...

  10. 使用Metasploit工作区

    使用Metasploit工作区   Metasploit将所有数据都存储在PostgeSQL服务器中的msf数据库.渗透测试人员经常要使用Metasploit同时执行多个任务.为了避免数据混杂,Met ...