MVC5 + EF6 + Bootstrap3 (16) 客户端验证

原文:MVC5 + EF6 + Bootstrap3 (16) 客户端验证

Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-client-side-validation.html

系列教程:MVC5 + EF6 + Bootstrap3

上一节:MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证

源码下载:点我下载

本节内容比较简单,在上节服务器端验证的基础上介绍客户端验证。

客户端验证的好处是不用向服务器提交代码就能显示出错误信息。反应更快,与用户交互更流畅。

然而,其致命的弱点就是验证脚本可以在客户端被随意修改。因此它是不可靠的。

所以我们这里介绍怎样给单纯的服务器端验证加上客户端验证。

那么我们就基于上一节讲的Data Annotation验证添加客户端验证。点此查看

首先,确认解决方案根目录下的web.config文件中激活了客户端验证:

1 <configuration>
2   <appSettings>
3     <add key="ClientValidationEnabled" value="true" />
4     <add key="UnobtrusiveJavaScriptEnabled" value="true" />
5   </appSettings>
6 </configuration>

第3行表示激活了客户端验证。第4行表示激活Unobstrusive JavaScript。它代表着一种将Html代码和JavasScript分离开的思想。总体来说就是用代码分离的思想做客户端验证。

然后继续使用上一节创建的Model和Controller。为了方便大家查看,这里贴出代码,对代码的具体解释点此查看

Models/DataAnnotationModel.cs

 1 using System.ComponentModel.DataAnnotations;
 2 namespace SlarkInc.Models
 3 {
 4     public class DataAnnotationModel
 5     {
 6         [Required(ErrorMessage = "Name is required")]
 7         public string Name { get; set; }
 8
 9         [Required(ErrorMessage = "Email is required")]
10         [RegularExpression(@"^\s*([A-Za-z0-9_-]+(\.\w+)*@([\w-]+\.)+\w{2,3})\s*$", ErrorMessage = "Email is invalid")]
11         public string Email { get; set; }
12     }
13 }

Controllers/DataValidationController.cs

 1 using System.Web.Mvc;
 2 using SlarkInc.Models;
 3 using System.Text.RegularExpressions;
 4
 5 namespace SlarkInc.Controllers
 6 {
 7     public class DataValidationController : Controller
 8     {
 9         public ActionResult DataAnnotationAction()
10         {
11             return View();
12         }
13
14         [HttpPost]
15         public ActionResult DataAnnotationAction(DataAnnotationModel model)
16         {
17             if (ModelState.IsValid)
18             {
19                 ViewBag.Name = model.Name;
20                 ViewBag.Email = model.Email;
21             }
22             return View(model);
23         }
24     }
25 }

View代码继续沿用,不过需要添加客户端验证所需的js文件。

Views/DataValidation/DataAnnotationAction.cshtml

 1 @model SlarkInc.Models.DataAnnotationModel
 2 @{
 3     ViewBag.Title = "DataAnnotationAction";
 4 }
 5 <h2>Data Annotation Validation</h2>
 6 @Html.ValidationSummary()
 7 @using (Html.BeginForm())
 8 {
 9     if (@ViewData.ModelState.IsValid && ViewBag.Name != null)
10     {
11         <b>
12             Name : @ViewBag.Name
13             <br />
14             Email: @ViewBag.Email
15         </b>
16     }
17     <fieldset>
18         <div class="editor-label">
19             @Html.LabelFor(model => model.Name)
20         </div>
21         <div class="editor-field">
22             @Html.EditorFor(model => model.Name)
23             @Html.ValidationMessageFor(model => model.Name)
24         </div>
25         <div class="editor-label">
26             @Html.LabelFor(model => model.Email)
27         </div>
28         <div class="editor-field">
29             @Html.EditorFor(model => model.Email)
30             @Html.ValidationMessageFor(model => model.Email)
31         </div>
32         <br />
33         <input type="submit" value="Submit" />
34     </fieldset>
35 }
36 @section Scripts
37 {
38     @Scripts.Render("~/bundles/jqueryval")
39 }

第36-39行用来添加客户端验证所需的js文件。

这一段代码会调用App_Start文件夹下的BundleConfig.cs文件。文件内容如下:

 1 namespace SlarkInc
 2 {
 3     public class BundleConfig
 4     {
 5         public static void RegisterBundles(BundleCollection bundles)
 6         {
 7             bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
 8                         "~/Scripts/jquery-{version}.js"));
 9
10             bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
11                         "~/Scripts/jquery.validate*"));
12
13             bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
14                         "~/Scripts/modernizr-*"));
15
16             bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
17                       "~/Scripts/bootstrap.js",
18                       "~/Scripts/respond.js"));
19
20             bundles.Add(new StyleBundle("~/Content/css").Include(
21                       "~/Content/bootstrap.css",
22                       "~/Content/site.css"));
23         }
24     }
25 }

第10和11行的代码会被调用。代码会引入所有符合"~/Scripts/jquery.validate*"条件的js文件。

即以下红色方框内文件:

按F5运行,输入以下错误信息,可以看到如下验证提示信息:

点提交按钮时,页面没有刷新,证明是客户端验证。

右键点击页面,选择查看源代码。可以看到Scripts.Render("~/bundles/jqueryval")函数向页面里加入了如下两个js文件。

1 <script src="/Scripts/jquery.validate.js"></script>
2 <script src="/Scripts/jquery.validate.unobtrusive.js"></script>

为什么不是之前截图看到的5个?我推测这和web.config设置以及用的是debug或release编译模式有关。

在页面生成的两个输入框的代码如下:

Name:

1 <div class="editor-field">
2             <input class="text-box single-line" data-val="true" data-val-required="Name is required" id="Name" name="Name" type="text" value="" /        >
3             <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>
4         </div>

Email:

1 <div class="editor-field">
2             <input class="text-box single-line" data-val="true" data-val-regex="Email is invalid" data-val-regex-pattern="^\s*([A-Za-z0-9_-]+(\.\        w+)*@([\w-]+\.)+\w{2,3})\s*$" data-val-required="Email is required" id="Email" name="Email" type="text" value="" />
3             <span class="field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
4         </div>

可以看到验证所需的信息都在html代码里,而验证的函数逻辑都在引入的validate的js文件里。两部分完全分离,但是又配合得很好。

到此,我们的客户端验证就介绍完了。

后面会持续更新,敬请期待。

上一节:MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证

作者:Slark.NET

出处:http://www.cnblogs.com/slark/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。

时间: 2024-08-08 01:12:19

MVC5 + EF6 + Bootstrap3 (16) 客户端验证的相关文章

MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证

Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-server-side-validation.html 系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView 源码下载:点我下载 目录 前言 通过ModelState验证数据 通过Data Annotation验证数据 结尾 前言 在提交数据前进行数据验证可

MVC5 + EF6 + Bootstrap3 (13) 查看详情、编辑数据、删除数据

Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-rud.html 系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (12) 新建数据 源码下载:点我下载 目录 前言 添加链接 查看详情 编辑数据 删除数据 结尾 前言 所谓万事开头难,前面用两节介绍了查询页面,一节介绍了创建数据.由于前面做了大量的铺垫,本节就能顺利的将查看详情.编辑数据.删

MVC5 + EF6 + Bootstrap3 (12) 新建数据

原文:MVC5 + EF6 + Bootstrap3 (12) 新建数据 Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-create.html 系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (11) 排序.搜索.分页 源码下载:点我下载 目录 前言 新建链接 新建页面Action 新建页面View 添加数据Action 查看结果 结尾

MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页

文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-pagedlist.html 系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (10) 数据查询页面 源码下载:点我下载 目录 前言 排序 搜索 分页 结尾 前言 上一节我们做到了如下的一个基础查询页面.本节我们向这个页面中加入排序.搜索和分页功能. 排序 从上图中的地址栏中可以看到

MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView

Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-partialview.html 系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (13) 查看详情.编辑数据.删除数据 源码下载:点我下载 目录 前言 简单分部视图 带Model的分部视图 使用ChildAction调用分部视图 ajax无刷新更新分部视图 结尾 前言 本节我们来看分部视图P

MVC5 + EF6 + Bootstrap3 (10) 数据查询页面

文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-search-page.html 上一节:MVC5 + EF6 + Bootstrap3 (9) HtmlHelper用法大全(下) 源码下载:点我下载 目录 前言 创建Model 创建数据库上下文DbContext 创建初始化数据 创建Controller 创建View 查看结果页面 查看数据库 结尾 前言 前面铺垫了那么多,今天我们就用MVC5

MVC5 + EF6 + Bootstrap3 (9) HtmlHelper用法大全(下)

文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-httphelper-part2.html 上一节:MVC5 + EF6 + Bootstrap3 (8) HtmlHelper用法大全(上) 源码下载:点我下载 目录: 说明 Form表单 使用TagBuilder创建自定义标签 强类型HtmlHelper LabelFor数据标签 DisplayFor 和 EditorFor显示和编辑Model

MVC5 + EF6 + Bootstrap3 (8) HtmlHelper用法大全(上)

文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-httphelper-part1.html 上一节:MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统 源码下载:点我下载 目录: HtmlHelper简介 准备工作 链接 ActionLink链接 RouteLink链接 input控件 TextBox输入框 Hidden隐藏域 Password密码输入框 Che

MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统

原文:MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统 文章来源: Slark.NET-博客园http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-grid.html 上一节:ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 下一节:ASP.NET MVC5 + EF6 + Bootstrap3 (8) View中的HtmlHelper用法大全(上) 源码下载:点我下载