本节介绍如何在咱们的Movie(电影)模型中添加一些验证规则,同时确认当用户使用咱们的应用程序建立或编辑电影信息时将使用这些验证规则对用户输入的信息进行检查。首先,让咱们在Movie类中追加一些验证规则。打开Movie.cs文件,在文件的头部追加一条引用System.ComponentModel.DataAnnotations命名空间的using语句,代码以下所示:html
using System.ComponentModel.DataAnnotations;数据库
这个System.ComponentModel.DataAnnotations命名空间是.NET Framework中的一个命名空间。它提供了不少内建的验证规则,你能够对任何类或属性显式指定这些验证规则。固然还有些高级属性还要用到System.ComponentModel.DataAnnotations.Schema命名空间。服务器
在Movie类中追加内建的验证规则:ide
1 public class Movie 2 { 3 public int ID { get; set; } 4 [Required(ErrorMessage = "必须输入标题")] 5 public string Title { get; set; } 6 [Required(ErrorMessage = "必须输入发行日期")] 7 public DateTime ReleaseDate { get; set; } 8 [Required(ErrorMessage = "必须指定种类")] 9 public string Genre { get; set; } 10 [Required(ErrorMessage = "必须输入票价")] 11 [Range(1, 100, ErrorMessage = "票价必须在1元到100元之间")] 12 public decimal Price { get; set; } 13 [StringLength(5,ErrorMessage = "最多容许输入五个字符")] 14 public string Rating { get; set; } 15 }
上述这些验证属性指定了咱们想要强加给模型中各属性的验证规则。Required属性表示必填项,必需要指定一个属性值。在上例中,一个有效的电影信息必须含有标题,发行日期,种类与票价信息。Range属性表示属性值必须在一段范围之间。StringLength属性表示一个字符串属性的最大长度或最短长度。EF在将一条数据保存到数据库以前,首先使用你对模型类指定的验证规则来对数据进行有效性验证。例如,在如下代码中,当程序调用SaveChanges方法时将抛出一个异常,由于数据并不知足Movie属性的必须输入条件,同时票价属性的值为0,不在指定的容许范围内(1-100)ui
1 MovieDBContext db = new MovieDBContext(); 2 Movie movie = new Movie(); 3 movie.Title = "大笑江湖; 4 movie.Price = 0.0M; 5 db.Movies.Add(movie); 6 db.SaveChanges(); // 这里将抛出一个校验异常
经过Entity Framework来自动实现验证规则检查可让应用程序变得更强健。它也确保咱们不会因为忘了实施数据验证而使得一些无效数据保存到数据库中。如下是完整代码:spa
1 using System.Data.Entity; 2 using System.Data.Entity.ModelConfiguration; 3 using System.ComponentModel.DataAnnotations; 4 namespace MvcMovie.Models 5 { 6 public class Movie 7 { 8 public int ID { get; set; } 9 [Required(ErrorMessage = "必须输入标题")] 10 public string Title { get; set; } 11 [Required(ErrorMessage = "必须输入发行日期")] 12 public DateTime ReleaseDate { get; set; } 13 [Required(ErrorMessage = "必须指定种类")] 14 public string Genre { get; set; } 15 [Required(ErrorMessage = "必须输入票价")] 16 [Range(1, 100, ErrorMessage = "票价必须在1元到100元之间")] 17 public decimal Price { get; set; } 18 [StringLength(5,ErrorMessage = "最多容许输入五个字符")] 19 public string Rating { get; set; } 20 } 21 public class MovieDBContext : DbContext 22 { 23 public DbSet<Movie> Movies { get; set; } 24 protected override void OnModelCreating(ModelBuilder modelBuilder) 25 { 26 modelBuilder.Entity<Movie>().Property(p => 27 p.Price).HasPrecision(18, 2); 28 } 29 } 30 }
如今让咱们运行咱们的应用程序,并在地址栏中输入“http://localhost:xx/Movies”。在电影清单画面中点击追加按钮打开追加电影画面。在该画面中的表单中填入一些无效的属性值,而后点击追加按钮。如图:code
请注意表单自动使用了一个背景颜色来高亮显示包含了无效数据的文本框,而且在每一个文本框的旁边显示验证错误信息。使用的错误信息文字正是咱们在前面代码中所指定的验证错误的错误信息文字。这个验证错误既能够由客户端引起(JS脚本),也能够由服务器端引起(当用户禁止使用JavaScript脚本时)。这种处理方法是很是不错的,由于咱们再也不须要为了显示错误信息文字而在MoviesController类或Create.cshtml视图文件中书写没必要要的代码。咱们以前建立的控制器与视图将自动实施验证规则与显示验证错误信息文字。能够发现MVC中大量应用相似C#特性的属性设置,使开发代码很是简洁干净。在将来的MVC 5中微软为咱们又添加了路由属性,这对于MVC开发者来讲但是一个福音!htm