轉自http://firechun.blog.163.com/blog/static/31804522201103133832931/
在Edit和Create表單中有一個很嚴重的問題:沒有做任何驗證。我們可以試一下讓必要欄位為空白或者在價格欄位中輸入字母,我們將會看到一個來自資料庫的錯誤。
為應用程式的模型類添加資料註解(Data Annotations)讓我們對資料進行驗證變得很容易,資料註解可以讓我們描述要應用到模型屬性上的規則,ASP.NET MVC會強制應用這些規則並顯示恰當的訊息給使用者。
為Album表單添加驗證
我們將使用下列資料註解特性:
- Required——表示該欄位為必要欄位
- DisplayName——定義我們要顯示在表單欄位和驗證資訊中出現的文本
- StringLength——為字串屬性定義最大長度
- Range——為數值欄位定義最大值和最小值
- Bind——列出為模型屬性綁定參數或表單資料時,包括或排除的欄位
- ScaffoldColumn ——在編輯器表單中允許隱藏的欄位
注意:要獲得更多使用資料註解特性為模型驗證的資訊,訪問MSDN文檔:http://go.microsoft.com/fwlink/?LinkId=159063
開啟Album類並在頂部添加下列命名空間:
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
為屬性添加顯示和驗證特性,如下所示:
namespace MvcMusicStore.Models
{
[Bind(Exclude = "AlbumId")]
public class Album
{
[ScaffoldColumn(false)]
public int AlbumId { get; set; }
[DisplayName("Genre")]
public int GenreId { get; set; }
[DisplayName("Artist")]
public int ArtistId { get; set; }
[Required(ErrorMessage = "An Album Title is required")]
[StringLength(160)]
public string Title { get; set; }
[Required(ErrorMessage = "Price is required")]
[Range(0.01, 100.00,
ErrorMessage = "Price must be between 0.01 and 100.00")]
public decimal Price { get; set; }
[DisplayName("Album Art URL")]
[StringLength(1024)]
public string AlbumArtUrl { get; set; }
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
}
}
在類中添中這些後,Create和Edit介面立即對欄位驗證,並使用我們定義的顯示名稱(DisplayName),例如用Album Art URL替換了AlbumArtURL。運行應用程式並瀏覽/StoreManager/Create:
點擊“Save”按紐時,不符合驗證規則的欄位旁會顯示驗證錯誤資訊。
測試用戶端驗證
從應用角度來看,伺服器端驗證是非常重要的,因為使用者可能繞過用戶端驗證。然而只對Web表單進行伺服器驗證有三個重大問題:
- 1.在表單提交->伺服器端驗證->返回到使用者瀏覽器的過程中,使用者必須等待。
- 2.使用者正確填寫欄位並通過驗證規則時不能及時得到反饋。
- 3.我們浪費伺服器資源執行驗證邏輯,而沒有利用使用者的瀏覽器。
很幸運,ASP.NET MVC模板架構內建了用戶端驗證,不需要任何額外的工作。
在Title欄位輸入單個字元以滿足非空驗證,驗證會立即消失(證明它是用戶端驗證)。