ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后
ASP.NET MVC借助jQuery的验证机制,提供了一套从客户端到服务端异步验证的解决方案,通常情况下,用起来相当方便。但面对一些相对特殊的情况,可能会遇到验证失效的场景,比如在使用ajax动态异步加载视图的时候。所以,有必要了解其背后运行的原理。首先从了解jQuery验证开始。本篇主要包括:
● jQuery验证的各种方式
● 错误信息是如何显示的
● 调用validate方法的背后发生了什么?
jQuery验证的各种方式
□ 通过class属性值实施验证规则
使用jQuery对表单元素进行验证,一种做法是通过为表单元素添加class属性值实现的。
如果想对jQuery验证汉化,可通过NuGet安装jQuery.Validation.Localization:
Install-Package jQuery.Validation.Localization
<form><input id="Name" name="Name" type="text" class="required"/><hr/><input type="submit" value="提交"/></form>@section scripts{<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/localization/messages_zh.js"></script><script type="text/javascript">$(function() {$('form').validate();});</script>}

□ 通过$.validator.addClassRules方法自定义验证规则
通过 $.validator.addClassRules方法还可以自定义验证规则,然后把新的规则名作为表单元素class属性的值。
<form><input id="Name" name="Name" type="text" class="name" /><br/><input id="z" name="z" class="zip" type="text"/><hr/><input type="submit" value="提交"/></form>@section scripts{<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/localization/messages_zh.js"></script><script type="text/javascript">$(function() {$.validator.addClassRules({name: {required: true,minlength: 2},zip: {required: true,digits: true,minlength: 5,maxlength: 5}});$('form').validate();});</script>}

□ 通过$.validator.addMethod自定义验证规则
<form><input id="e" type="text" name="firstName"/><hr/><input type="submit" value="提交"/></form>@section scripts{<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/localization/messages_zh.js"></script><script type="text/javascript">$(function () {$.validator.addMethod("notnumbers", function(value, element) {return !/[0-9]*/.test(value);}, "不能输入数字");$('form').validate({rules: {firstName: {notnumbers: true}}});});</script>}

□ 通过validate方法的json参数
通过validate方法的json参数,也可为表单元素设置验证规则。
<form><input id="e" type="text" name="userEmail"/><hr/><input type="submit" value="提交"/></form>@section scripts{<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/localization/messages_zh.js"></script><script type="text/javascript">$(function() {$('form').validate({rules: {userEmail: {email: true,required: true}}});});</script>}

□ 动态添加或删除验证规则
通过rules方法可以为表单元素动态添加验证规则。
<form><input id="e" type="text" name="userEmail"/><hr/><input type="submit" value="提交"/></form>@section scripts{<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/localization/messages_zh.js"></script><script type="text/javascript">$(function() {$('form').validate({rules: {userEmail: {required: true}}});//为表单元素动态添加验证规则$('#e').rules('add', {minlength: 2,maxlength:5});});</script>}

通过rules方法可以为表单元素动态移除验证规则。
<form><input id="e" type="text" name="userEmail"/><hr/><input type="submit" value="提交"/></form>@section scripts{<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/localization/messages_zh.js"></script><script type="text/javascript">$(function() {$('form').validate({rules: {userEmail: {required: true}}});//为表单元素动态添加验证规则$('#e').rules('add', {minlength: 2,maxlength:5});//为表单元素动态移除验证规则$('#e').rules('remove', 'minlength');});</script>}

错误信息是如何显示的
□ 通过messages对象
<form><input id="e" type="text" name="userEmail"/><hr/><input type="submit" value="提交"/></form>@section scripts{<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/localization/messages_zh.js"></script><script type="text/javascript">$(function() {$('form').validate({rules: {userEmail: {required: true,email: true}},messages: {userEmail: {required: "*",email: "哈哈,输入正确的email"}}});});</script>}

□ 通过$.validator.addMethod重写错误提示
通过$.validator.addMethod方法还可以为默认验证规则重写错误提示信息。
<form><input id="Name" name="Name" type="text" class="name" /><br/><input id="z" name="z" class="zip" type="text"/><hr/><input type="submit" value="提交"/></form>@section scripts{<script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/localization/messages_zh.js"></script><script type="text/javascript">$(function() {$.validator.addClassRules({name: {newrequired: true,minlength: 2},zip: {required: true,digits: true,minlength: 5,maxlength: 5}});$.validator.addMethod("newrequired", $.validator.methods.required, "我说这个字段必填");$('form').validate();});</script>}

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

调用validate方法的背后发生了什么?
→通过表单事件触发验证
这些表单事件包括focusin, focusout, keyup, submit, click,这些事件是可以禁止的。
$(".selector").validate({onfocusout: false,onkeyup: false,onclick: false,onsubmit: false});
→获取validate对象,该对象包含了所有了验证规则和设置
可以通过如下方式获取validate对象。
var validator = $('.selector').data("validator");
→对各个表单元素进行验证
下一篇将试着去了解ASP.NET MVC异步验证的表单html元素是如何创建的。
ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后的更多相关文章
- ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建
在上一篇"ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式.错误信息提示.validate方法的背后"中,了解了jQuery如何验证,如何显示错误信息,本篇要 ...
- ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的
在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.uno ...
- asp.net mvc异步查询
对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...
- c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作
ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- AngularJS 表单数据验证及错误信息提示
一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...
- ASP.NET MVC和WebForm 轻松实现前端和后端的双重验证 jquery.validate+ValidationSugar
上次不足的改进 可能上一个贴子给大家带来很多误解,所以我这次把DEMO完善了两个版本 [ASP.NET WEBFROM]和[ ASP.NET MVC] 修改了一些BUG,并且修改了一些细了 在上个贴子 ...
- 对于asp.net mvc异步查询
如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合mvc实现一个产品列表的Demo. 问 ...
- ASP.NET MVC 学习7、为Model Class的字段添加验证属性(validation attribuate)
Adding Validation to the Model ,在Model中添加数据验证 参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-star ...
随机推荐
- pixel像素基础
地址:http://www.imooc.com/video/9564 dp(安卓),pt(iphone)是物理像素 ppi是由物理像素确定的 一英寸内有多少个像素渲染,ppi越高,图片越清晰 1px ...
- String,StringBuffer和StringBuilder的区别
(1)String类的API概述是这样的:String类代表字符串,Java程序中的所有字符串字面值都作为此类的实例体现.字符串是常量,它们的值在创建之后不能更改.可见,String是对象且为不可变对 ...
- MediatR 中介模式
使用MediatR完成基于内存级别的消息发布订阅 在微服务架构中领域驱动模型中处理领域事件的相关操作 在区分好领域模型后,就拿代码中来说嘛,用户领域中添加用户操作可能或存在跟用户相关的一些领域事件,在 ...
- HTML5练习4
1.菜单条 主要代码 <!doctype html> <html> <head> <meta charset="utf-8"> &l ...
- jdk windows环境变量
(1)新建->变量名"JAVA_HOME",变量值"C:\Java\jdk1.8.0_05"(即JDK的安装路径) (2)编辑->变量名" ...
- 【Java】 int与char类型间的相互转化
在[Java] 剑指offer(16) 打印1到最大的n位数中遇到了int类型与char类型之间的转换,这里总结一下. (1)int类型转char类型,将数字加一个‘0’,并强制类型转换为char即可 ...
- JAVA 多线程制作大球吃小球 一、实现球的自动生成及运动 生产消费模型
前几天用多线程实现了创建小球并移动,想到大鱼吃小鱼,便突发奇想要写一个大球吃小球.首先第一步自然是先把界面弄好啦 public class BallUI extends JPanel { privat ...
- canvas版《俄罗斯方块》
试玩(没有考虑兼容低版本浏览器): See the Pen Canvas俄罗斯方块 by 王美建 (@wangmeijian) on CodePen. ************************ ...
- 使用ajax与jqplot的小体会
在使用ajax与jqplot时遇到了传值的问题!一开始都不知值是怎么传过去的,只找到了例子是以<div id="data">原始数据</div>这样子来接收 ...
- 命令:tr
参考资料:https://www.thegeekstuff.com/2012/12/linux-tr-command/ 简介 tr命令用于转换.删除或者去除重复字符.它从STDIN中读取数据并且将其写 ...