添加模型驗證
這一節我們將為Movie模型添加驗證邏輯,並且確保驗證規則在使用者試圖建立或者編輯一個movie時始終有效執行。
我們首先要添加對“System.ComponentModel.DataAnnotations”命名空間的引用,它是.NET Framework中的一個命名空間。它提供了很多內建的驗證規則,你可以對任何類或屬性顯式指定這些驗證規則。
由於我們的模型類MOVIE是由Entitiy Framework自動產生的,我們不適合手動去編輯,這樣容易導致項目編譯出錯,但是我們的模型驗證是在模型的基礎上添加驗證規則的,這看起來是個兩難的境地。我們先看看Entity Framework給我們產生的MOVIE到底是怎樣的,如下所示:
我們可以看到,MOVIE是個Partial類!這意味著我們可以使用同樣的方法定義另外一個Partial類,然後對這個部分類進行擴充添加驗證邏輯。.NET在運行時會把多個Partial標識的相同類名的類一起編譯成一個類,但是必須確保所有的部分類在同樣的命名空間下!
我們在DAL檔案夾下建立一個類MovieValidation.cs,然後編寫如下代碼:
using System;using System.ComponentModel.DataAnnotations;namespace MvcMovie.DAL{ [MetadataType(typeof(MovieValidation))] public partial class MOVIE { public MOVIE() { } public class MovieValidation { [Required(ErrorMessage = "Title is required")] public string TITLE { get; set; } [Required(ErrorMessage = "Date is required")] public DateTime RELEASEDATE { get; set; } [Required(ErrorMessage = "Genre must be specified")] public string GENRE { get; set; } [Required(ErrorMessage = "Price Required")] [Range(1, 100, ErrorMessage = "Price must be between $1 and $100")] public decimal PRICE { get; set; } } }}
修改完成後儲存文檔,重新運行程式並且導航到
http://localhost:xxx/Movies/Create。
不輸入任何東西,點擊“Create”按鈕,然後您就可以看到我們之前設定的驗證規則生效了。
我們可以看到Visual Studio使用預設的CSS樣式為我們顯示出了錯誤資訊。這些錯誤資訊就是我們之前在模型的屬性上設定的,並且這也驗證是同時在用戶端和伺服器端執行的,即使我們瀏覽器禁用了JS指令碼,我們還有伺服器端驗證,也就是說我們在模型屬性上設定的驗證規則可以在多個地方多次使用,這正是DRY(Don't Repeat Yourself)的具體實現。我們可以查看網頁源檔案:
<div class="editor-field"> <input class="text-box single-line" data-val="true" data-val-number="欄位 PRICE 必須是一個數字"data-val-range="Price must be between $1 and $100" data-val-range-max="100" data-val-range-min="1" data-val-required="Price Required" id="PRICE" name="PRICE" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="PRICE" data-valmsg-replace="true"></span> </div>
可以看到MVC為我們自動產生了驗證指令碼,其中"data-val”、"data-val-number”是jquery.validate.unobtrusive.min.js的文法,這個js檔案時微軟自己封裝的JS庫。
還有一個重要的好處就是您不需要修改MoviesController類以及Create.Cshtml中的任何一行代碼就實現了UI層的資料驗證。
關於這個驗證過程是如何?的請查看其他資訊:點擊查看
為Movie模型添加顯示格式化
有時候我們需要為模型的屬性的顯示和資料類型進行格式化,System.ComponentModel.DataAnnotations
命名空間提供了格式化的支援,下面我們來具體操作。
修改我們之前建立的MovieValidation.cs類如下所示,我們添加了RELEASEDATE和PRICE的顯示格式:
using System;using System.ComponentModel.DataAnnotations;namespace MvcMovie.DAL{ [MetadataType(typeof(MovieValidation))] public partial class MOVIE { public MOVIE() { } public class MovieValidation { [Required(ErrorMessage = "Title is required")] public string TITLE { get; set; } [Required(ErrorMessage = "Date is required")] [DisplayFormat(DataFormatString = "{0:d}")] public DateTime RELEASEDATE { get; set; } [Required(ErrorMessage = "Genre must be specified")] public string GENRE { get; set; } [Required(ErrorMessage = "Price Required")] [DisplayFormat(DataFormatString = "{0:c}")] [Range(1, 100, ErrorMessage = "Price must be between $1 and $100")] public decimal PRICE { get; set; } } }}
我們發現圖中兩個欄位的資料已經被格式化顯示了。
到目前為止,我們已經完成了一個Asp.net MVC3的入門級執行個體,如果您想瞭解更多的資訊請訪問:
ASP.NET MVC官方網站教程:http://www.asp.net/mvc/tutorials
ASP.NET MVC 3快速入門:
http://blog.csdn.net/qwlovedzm/article/details/6313487