在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在本节中将会给 ASP.NET MVC 的核心设计信条之一是DRY: "不要重复自己(Don’t Repeat Yourself)"。ASP.NET MVC鼓励您指定功能或者行为,只做一次,然后将它应用到应用程序的各个地方。这可以减少您需要编写的代码量,并减少代码出错率,易于代码维护。 给ASP.NET MVC 和 Entity Framework Code First 提供验证支持是 DRY 信条的一次伟大实践。您可以在一个地方 (模型类) 中以声明的方式指定验证规则,这个规则会在应用程序中的任何地方执行。 让我们看看您如何在本电影应用程序中,使用此验证支持。 给电影模型添加验证规则您将首先向 打开Movie.cs文件。在文件的顶部添加 using System.ComponentModel.DataAnnotations; 注意,该命名空间不包含 更新 public class Movie { public int ID { get; set; } [Required] public string Title { get; set; } [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } [Required] public string Genre { get; set; } [Range(1, 100)] [DataType(DataType.Currency)] public decimal Price { get; set; } [StringLength(5)] public string Rating { get; set; } }
运行该应用程序,您会再次得到了以下的运行时错误: The model backing the 'MovieDBContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). 我们将使用Migrations来更新 Schema。生成解决方案,然后打开软件包管理器控制台窗口,并输入以下命令:
当此命令完后,Visual Studio会打开指定名称 (AddDataAnnotationsMig)的文件,其中定义了派生自 验证属性将指定一个验证行为,这样您可以指定模型中的那个属性需要被强制验证。Required属性指示该属性必须有一个值 ,在此示例中,一部电影必须要有 Code First 确保您在模型类上所指定的验证规则,会在应用程序修改数据库之前执行。例如,下面的代码在调用 MovieDBContext db = new MovieDBContext(); Movie movie = new Movie(); movie.Title = "Gone with the Wind"; movie.Price = 0.0M; db.Movies.Add(movie); db.SaveChanges(); // <= Will throw server side validation exception
验证规则会自动被 .NET Framework执行,这将有助于使您的应用程序更加的可靠。它还确保你不会因为忘了验证,无意中使得坏的数据也写入到了数据库。 下面是更新后的Movie.cs文件的完整代码清单:
using System; using System.Data.Entity; using System.ComponentModel.DataAnnotations; namespace MvcMovie.Models { public class Movie { public int ID { get; set; } [Required] public string Title { get; set; } [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } [Required] public string Genre { get; set; } [Range(1, 100)] [DataType(DataType.Currency)] public decimal Price { get; set; } [StringLength(5)] public string Rating { get; set; } } public class MovieDBContext : DbContext { public DbSet<Movie> Movies { get; set; } } }
ASP.NET MVC 的验证错误UI重新运行应用程序,浏览 /Movies的 URL。 单击Create New链接,来添加一部新电影。在窗体中填写一些无效值,然后单击Create按钮。 注意,为了使jQuery支持使用逗号的非英语区域的验证 ,需要设置逗号(",")来表示小数点,你需要引入globalize.js并且你还需要具体的指定cultures/globalize.cultures.js文件 (地址在https://github.com/jquery/globalize) 在 JavaScript 中可以使用
@section Scripts { @Scripts.Render("~/bundles/jqueryval") <script src="~/Scripts/globalize.js"></script> <script src="~/Scripts/globalize.culture.fr-FR.js"></script> <script> $.validator.methods.number = function (value, element) { return this.optional(element) || !isNaN(Globalize.parseFloat(value)); } $(document).ready(function () { Globalize.culture('fr-FR'); }); </script> <script> jQuery.extend(jQuery.validator.methods, { range: function (value, element, param) { //Use the Globalization plugin to parse the value var val = $.global.parseFloat(value); return this.optional(element) || ( val >= param[0] && val <= param[1]); } }); </script> }
为了使用这种用户验证界面,真正的好处是,您不需要修改 您可能已经注意到了 1. Tab into the field. 2. Enter some text. 3. Tab out. 4. Tab back into the field. 5. Remove the text. 6. Tab out. 上面的顺序将触发必需的验证,而并不需要点击提交按钮。在不输入任何字段的情况下,直接点击提交按钮,将触发客户端验证。直到没有客户端验证错误的情况下,表单数据才会发送到服务器。您可以在服务器端HTTP Post 方法上加上断点来测试一下,或者使用Fiddler tool或 IE 9 F12 Developer tools. 如何验证创建视图和创建方法您可能很想知道验证用户界面在没有更新控制器或视图代码的情况下是如何生成的。下面列出了
// // GET: /Movies/Create public ActionResult Create() { return View(); } // // POST: /Movies/Create [HttpPost] public ActionResult Create(Movie movie) { if (ModelState.IsValid) { db.Movies.Add(movie); db.SaveChanges(); return RedirectToAction("Index"); } return View(movie); }
第一种(HTTP GET) 您可以在 下图显示了如何在火狐浏览器中禁用 JavaScript。 下图显示了如何在 Chrome 浏览器中禁用 JavaScript。 下面是框架代码在之前的教程中生成的Create.cshtml视图模板。它用来为以上两个操作方法来显示初始的form,同时在验证出错时来重新显示视图。
请注意,代码如何使用 如果您想要在后面更改验证逻辑,您可以做在一个地方,将验证信息添加到模型上。 (此示例中,是 给影片模型添加Formatting打开Movie.cs文件并查看 [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } [DataType(DataType.Currency)] public decimal Price { get; set; }
[DataType(DataType.EmailAddress)] 上面列出的属性只提供视图引擎来显示数据的格式(如:<a> 为 URL ,< href="mailto:EmailAddress.com"> 为电子邮件。您可以使用正则表达式属性来验证数据的格式。) 另一种使用 [DisplayFormat(DataFormatString = "{0:d}")] 下面的代码设置 [DisplayFormat(DataFormatString = "{0:c}")] 完整的
@model MvcMovie.Models.Movie @{ ViewBag.Title = "Create"; } <h2>Create</h2> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Movie</legend> <div class="editor-label"> @Html.LabelFor(model => model.Title) </div> <div class="editor-field"> @Html.EditorFor(model => model.Title) @Html.ValidationMessageFor(model => model.Title) </div> <div class="editor-label"> @Html.LabelFor(model => model.ReleaseDate) </div> <div class="editor-field"> @Html.EditorFor(model => model.ReleaseDate) @Html.ValidationMessageFor(model => model.ReleaseDate) </div> <div class="editor-label"> @Html.LabelFor(model => model.Genre) </div> <div class="editor-field"> @Html.EditorFor(model => model.Genre) @Html.ValidationMessageFor(model => model.Genre) </div> <div class="editor-label"> @Html.LabelFor(model => model.Price) </div> <div class="editor-field"> @Html.EditorFor(model => model.Price) @Html.ValidationMessageFor(model => model.Price) </div> <div class="editor-label"> @Html.LabelFor(model => model.Rating) </div> <div class="editor-field"> @Html.EditorFor(model => model.Rating) @Html.ValidationMessageFor(model => model.Rating) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> } <div> @Html.ActionLink("Back to List", "Index") </div>
运行该应用程序并浏览到 下图为默认Culture的显示(English US) 。 在下一部分,我们先会看看代码,然后再改进一下自动生成的
完整文档下载:Asp.Net MVC4入门指南.pdf -------------------------------------------------------------------------------------------------------------------- 译者注: 本系列共9篇文章,翻译自Asp.Net MVC4 官方教程,由于本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,非常适合新手入门Asp.Net MVC4,并由此开始开发工作。9篇文章为: 1. Asp.Net MVC4 入门介绍 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/01/2749906.html 2. 添加一个控制器 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/02/2751015.html 3. 添加一个视图 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/06/2756711.html 4. 添加一个模型 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/12/17/2821495.html 5. 从控制器访问数据模型 · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/11/2855935.html 6. 验证编辑方法和编辑视图 · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/24/2874622.html 7. 给电影表和模型添加新字段 · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/02/26/2933105.html 8. 给数据模型添加校验器 · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/05/2944030.html 9. 查询详细信息和删除记录 · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/07/2948000.html 10.第三方控件Studio for ASP.NET Wijmo MVC4 工具应用 · 地址:http://www.cnblogs.com/powertoolsteam/archive/2013/05/09/3068699.html
相关阅读: 微软 Build 2017 开发者大会:Azure 与 AI 的快速发展
|
请发表评论