在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug 。但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升。在开发过程中我们可以不借助 JS 库,自己去手写 JS 验证,但是如果是团队项目,为了达到代码的统一还是调用统一的 表单验证方式 比较合适。下面介绍在 ASP.NET MVC中结合Jquery Validate 进行表单验证的方式。首先推荐一篇关于Jquery Validate 如何使用的博文,写的很详细。http://www.cnblogs.com/hejunrex/archive/2011/11/17/2252193.html。而我将要介绍的是如何结合Jquery Validate 进行表单验证。

一、Jquery.Validate 中的用法概述以及重要的用法

1.普通的表单结合 Jquery.Validate 的验证方式

以验证用户名、年龄、邮编为例。html表单如下

     <form id="addForm" method="post" action="/JQValidate/AddForm">
<div>
姓名:
<input type="text" name="txtName" id="txtName" />
<span class="errorMsg">错误信息放置的位置</span>
<br />
年龄:
<input type="text" name="txtAge" />
<span class="errorMsg"></span>
<br />
邮政编码:
<input type="text" name="txtZipCode" />
<span class="errorMsg"></span>
</div>
<div>
<input type="submit" value="提交" />
</div>
</form>

Jquery.Validate JS 验证

 <script src="~/Scripts/jquery-1.7.1.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script type="text/javascript">
$(function () {
// 表单验证
formValidate();
}); var formValidate = function () {
// 添加自定义校验(邮政编码验证)
jQuery.validator.addMethod("isZipCode", function (value, element) {
var zipCode = /^[0-9]{6}$/;
return this.optional(element) || (zipCode.test(value));
}, "请正确填写您的邮政编码"); $("#addForm").validate({ // #JQForm是form表单的ID
rules: {
txtName: { // 要验证的表单的id
required: true, // 是否是必填项
minlength: 2, // 最小长度
remote: "/JQValidate/ValidateName",// 返回 true 就会出现错误信息
},
txtAge: {
required: true,
range: [18, 30]
},
txtZipCode: {
required: true,
isZipCode: true,
},
},
messages: {// 如果没有给属性错误提示,就会用默认提示
txtName: {
required: "请输入会员名称", // 如果提交的时候没有填写提示的文字
minlength: "会员名称的长度不能小于2位", // 如果输入的长度小于2提示的文字
remote: "用户名重复"
},
txtAge: {
required: "年龄不能为空",
range: "年龄范围是18~30"
},
txtZipCode: {
required: "邮政编码不能为空",
},
},
errorPlacement: function (error, element) { // 自定义错误信息放置的位置
error.appendTo(element.next("span"));
},
})
};
</script>

2.添加自定义校验

以添加一个自定义的邮编为例

        // 添加自定义校验(邮政编码验证)
jQuery.validator.addMethod("isZipCode", function (value, element) {
var zipCode= /^[0-9]{6}$/;
return this.optional(element) || (zipCode.test(value));
}, "请正确填写您的邮政编码");

3.把错误消息放到自定义的区域

有时候美工设计的静态页面我们开发人员为了保持其html结构不被改变,就要自定义错误信息的位置。如美工的html表单结构:

       姓名:
<input type="text" name="txtName" id="txtName" />
<span class="errorMsg">错误信息放置的位置</span>
      $("#addForm").validate({  // #JQForm是form表单的ID
rules: {},
messages: {},
errorPlacement: function (error, element) { // 自定义错误信息放置的位置
error.appendTo(element.next("span"));
},
})

4.远程校验

返回值为true 就提示错误信息,否则不提示

 remote: "/JQValidate/ValidateName",// 返回 true 就会出现错误信息

注意如果不传参数,默认是把当前校验的值传到后台校验,如果还要传入其他参数通过这种形式(dataType必须是json类型)

 remote: { // 默认会把当前验证的值传到后台验证,如果还需要传输其他的参数在data中添加
url: "/JQValidate/ValidateName",
type: "post",
data: { "testData": "testName" },
dataType: "json", // 此处返回类型必须是JSON
}

二、Jquery.Validate 结合Ajax.BeginForm 验证方式,实现验证成功后的异步提交表单

1.引入 JS

     <script src="~/Scripts/jquery-1.7.1.js"></script>
@*Ajax.BeginForm 需要的js 文件*@
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>

2.

普通的表单结合Jquery.Validate提交方式是非异步的,用Jquery.Validate 结合Ajax.BeginForn 验证方式,实现验证成功后的异步提交表单。如果让Jquery.Validate去验证表单就必须用<form></form>包裹,也就必须获取到<form></form>的id。如果没有设置要提交的表单id运行后查看网页源代码我们会发现ASP.NET MVC 默认会给我们分配一个form id,查看源文件如图

如果我们通过id=“form0”去验证也可以,但是如果一个页面不止一个表单就很难分清要验证哪个form表单了。我们看下Ajax.BeginForm的参数重载是可以设置form表单的属性的。如图

所以表单改成如下方式就行了(最后一个参数加上 new { @id = "AddForm" })

 @using (Ajax.BeginForm("AddForm", "JQValidate", new { }, new AjaxOptions() { HttpMethod = "post", OnBegin = "ajaxFormOnBegin", OnSuccess = "afterOnSuccess", OnFailure = "afterOnFailure", UpdateTargetId = "UpdateTargetHiddenID" }, new { @id = "AddForm" }))
{
<div>
姓名:
<input type="text" name="txtName" id="txtName" />
<span class="errorMsg">错误信息放置的位置</span>
<br />
年龄:
<input type="text" name="txtAge" />
<span class="errorMsg"></span>
<br />
邮政编码:
<input type="text" name="txtZipCode" />
<span class="errorMsg"></span>
</div>
<div>
<input type="submit" value="提交" />
</div>
}

三、Jquery.Validate 结合 非 form 表单提交的验证方式

有时候页面上不仅是表单数据,也有表格等其他数据,而不想通过form表单都提交到后台,但是又想通过Jquery.Validate方式验证。那么我们可以这样做。

表单:

     <form>
<div>
姓名:
<input type="text" name="txtName" id="txtName" />
<span class="errorMsg">错误信息放置的位置</span>
<br />
年龄:
<input type="text" name="txtAge" />
<span class="errorMsg"></span>
<br />
邮政编码:
<input type="text" name="txtZipCode" />
<span class="errorMsg"></span>
</div>
<div>
<input type="button" value="提交" onclick="javascript: btnSubmit();" />
</div>
</form>

Jquery.Validate 中有一个方法是valid(),是用来判断表单是否验证通过的,同时会进行校验是否合法。

Jquery.Validate验证:

 <script type="text/javascript">
$(function () {
// 表单验证
formValidate();
}); var formValidate = function () {
// 添加自定义校验(邮政编码验证)
jQuery.validator.addMethod("isZipCode", function (value, element) {
var zipCode = /^[0-9]{6}$/;
return this.optional(element) || (zipCode.test(value));
}, "请正确填写您的邮政编码"); $("#addForm").validate({ // #JQForm是form表单的ID
rules: {
txtName: { // 要验证的表单的id
required: true, // 是否是必填项
minlength: 2, // 最小长度
remote: "/JQValidate/ValidateName",// 返回 true 就会出现错误信息
},
txtAge: {
required: true,
range: [18, 30]
},
txtZipCode: {
required: true,
isZipCode: true,
},
},
messages: {// 如果没有给属性错误提示,就会用默认提示
txtName: {
required: "请输入会员名称", // 如果提交的时候没有填写提示的文字
minlength: "会员名称的长度不能小于2位", // 如果输入的长度小于2提示的文字
remote: "用户名重复"
},
txtAge: {
required: "年龄不能为空",
range: "年龄范围是18~30"
},
txtZipCode: {
required: "邮政编码不能为空",
},
},
errorPlacement: function (error, element) { // 自定义错误信息放置的位置
error.appendTo(element.next("span"));
},
})
};
</script>

Jquery.Validate验证是否通过,通过就往后台提交数据,没有通过会出现错误提示:

     // 非submit按钮提交方式
var btnSubmit = function () {
// 检测表单是否验证通过 并进行表单验证
var validateState = $("#addForm").valid();
if (!validateState) {
return false;
} // 往后台提交数据,当然还可以传入其他你想提交的数据
$.ajax({
url: "/JQValidate/AddForm",
type: "post",
dataType: "text",
data:{txtName:$("#txtName").val()},
success: function (data) {
alert(data);
}
}); };

总结

通过以上这几种结合Jquery.Validate表单验证提交方式,应该可以覆盖到我们日常开发过程中的表单验证方式,如果你还有更好的方式不妨大家一起交流分享。

下一篇博客将是介绍ASP.NET MVC 通过 模型注解方式进行表单验证。

ASP.NET MVC Jquery Validate 表单验证的多种方式的更多相关文章

  1. [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  2. Jquery Validate 表单验证的多种方式

    ASP.NET MVC Jquery Validate 表单验证的多种方式 在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体 ...

  3. jQuery Validate 表单验证 — 用户注册简单应用

    相信很多coder在表单验证这块都是自己写验证规则的,今天我们用jQuery Validate这款前端验证利器来写一个简单的应用. 可以先把我写的这个小demo运行试下,先睹为快.猛戳链接--> ...

  4. jquery validate表单验证插件-推荐

    1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家.     1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素  3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...

  5. jquery validate表单验证插件

    1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家.     1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素  3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...

  6. jQuery Validate 表单验证

    在做网页表单时时常需要在客户端对表单填写的数据进行验证一番才能提交,我们可以通过自己编写JavasScript代码来验证,但是有时数据量过多时就会有些难度了.基于jQuery的jquery.valid ...

  7. jQuery Validate 表单验证插件----自定义一个验证方法

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...

  8. jQuery Validate 表单验证插件----自定义校验结果样式

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...

  9. jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...

随机推荐

  1. MWeb for iOS 测试版介绍

    目前已开始第二次测试:MWeb for iOS 版本发布说明,更新至第二次测试版本  上图为 MWeb for iOS 的图标,再次感谢 @Producter http://weibo.com/u/ ...

  2. Webform 文件上传、 C#加图片水印 、 图片验证码

    文件上传:要使用控件 - FileUpload 1.如何判断是否选中文件? FileUpload.FileName - 选中文件的文件名,如果长度不大于0,那么说明没选中任何文件 js - f.val ...

  3. CSS3外轮廓属性

    外轮廓outline在页面中呈现的效果和边框border呈现的效果极其相似,但和元素边框border完全不同,外轮廓线不占用网页布局空间,不一定是矩形,外轮廓是属于一种动态样式,只有元素获取到焦点或者 ...

  4. java_Excel 导出

    package Demo; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; i ...

  5. paper 121 :matlab中imresize函数

    转自:http://www.cnblogs.com/rong86/p/3558344.html matlab中函数imresize简介: 函数功能:该函数用于对图像做缩放处理. 调用格式: B = i ...

  6. java线程池ThreadPoolExecutor理解

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...

  7. (temp)catch ip

    String str = "192.168.1.100"; String[] ipStr = str.split("\\."); ]; ; i < ; i ...

  8. Android 仿QQ消息界面

    values 下面 dimens.xml <resources> <!-- Default screen margins, per the Android Design guidel ...

  9. Cellebrite UFED 5.1 发布,全面支持三星 S6 S6 Edge Note5 HUAWEI series

    世界级取证公司Cellebrite 昨天发布了最新的 UFED 5.1 系统更新,4PC全面支持三星S6,S6EDGE NOTE5 以及HUAWEI,LG系列恢复,锁屏密码XX!下面是部分截图 有需要 ...

  10. icon fonts

    iconfont网站 http://www.iconfont.cn(推荐) http://fontello.com/ http://fontawesome.io/   https://icomoon. ...