MVC神韻---你想在哪解脫!(十五)

在模型中添加驗證規則

本節介紹如何在咱們的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 }
View Code

上述這些驗證屬性指定了咱們想要強加給模型中各屬性的驗證規則。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();        // 這裏將拋出一個校驗異常
View Code

經過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 }
View Code

如今讓咱們運行咱們的應用程序,並在地址欄中輸入「http://localhost:xx/Movies」。在電影清單畫面中點擊追加按鈕打開追加電影畫面。在該畫面中的表單中填入一些無效的屬性值,而後點擊追加按鈕。如圖:code

請注意表單自動使用了一個背景顏色來高亮顯示包含了無效數據的文本框,而且在每一個文本框的旁邊顯示驗證錯誤信息。使用的錯誤信息文字正是咱們在前面代碼中所指定的驗證錯誤的錯誤信息文字。這個驗證錯誤既能夠由客戶端引起(JS腳本),也能夠由服務器端引起(當用戶禁止使用JavaScript腳本時)。這種處理方法是很是不錯的,由於咱們再也不須要爲了顯示錯誤信息文字而在MoviesController類或Create.cshtml視圖文件中書寫沒必要要的代碼。咱們以前建立的控制器與視圖將自動實施驗證規則與顯示驗證錯誤信息文字。能夠發現MVC中大量應用相似C#特性的屬性設置,使開發代碼很是簡潔乾淨。在將來的MVC 5中微軟爲咱們又添加了路由屬性,這對於MVC開發者來講但是一個福音!htm

相關文章
相關標籤/搜索