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方法的背后的更多相关文章

  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. asp.net动态增加服务器端控件并提交表单

    为什么要用原生的呢? 1.目的 原生出现浏览器兼容性问题 极少,不用测试多浏览兼容性 .需要考虑到市面上的其他垃圾浏览器. 2.性能不好 如果不考虑第一条 你可以换一种方式 直接上代码 .aspx页面 ...

  2. 我们在部署 HTTPS 网站时,该如何选择SSL证书?

    我们在部署 HTTPS 网站时,该如何选择SSL证书? 首次部署HTTPS网站的同学对选择什么样的SSL证书多多少少都有点迷茫. 这里考虑的因素确实不少:是否支持多域名.泛域名,价格,信息泄露的保额, ...

  3. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (下篇)

    Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...

  4. 压缩跟踪Compressive Tracking(转)

    这位博主总结的实在太好了,从原理到论文到代码,连论文都不用看:论文:http://blog.csdn.net/zouxy09/article/details/8118360 代码部分:http://b ...

  5. Coursera台大机器学习技法课程笔记09-Decision Tree

    这是我们已经学到的(除Decision Tree外) 下面是一个典型的decision tree算法,有四个地方需要我们选择: 接着介绍了一个CART算法:通过decision stump分成两类,衡 ...

  6. java 持有对象总结

    java提供了大量的持有对象的方式: 1)数组将数字和对象联系起来,它保存类型明确的对象,查询对象时,不需要对结果做类型转换,它可以时多维的,可以保存基本数据类型的数据,但是,数组一旦生成,其容量就不 ...

  7. mysql添加事件

    begin declare debug int; set @debug = 0; if @debug = 1 then insert into task_monitor(info) values('s ...

  8. [转] CSSOM视图模式(CSSOM View Module)相关整理

    以下就是一些API属性的相关内容,包括兼容性,使用,测试等. 一.Window视图属性 这些属性可以hold住整个浏览器窗体大小.微软则将这些API称为“Screenview 接口”.包括:inner ...

  9. rpm包软件管理

    一.rpm介绍 linux服务器中所有的软件包安装方式有两种,一种是源码安装.另一种是二进制包安装(rpm)源码包安装的好处是适合不同的发行版本的linux,缺点是在编译过程中花费的时间很长,二进制包 ...

  10. 018 jquery中的事件

    一:事件 1.Dom的两种加载方式 2.程序 略 二:事件绑定 1.事件绑定介绍 2.程序一(使用click的原始方式) <!DOCTYPE html> <html> < ...