第 6 部分:使用資料註解進行模型驗證
作者 :JonGaloway
MVC 音樂市集是一個教學課程應用程式,會介紹並說明如何使用 ASP.NET MVC 和 Visual Studio 進行 Web 開發。
MVC 音樂市集是輕量型的市集實作,可線上銷售音樂相簿,並實作基本網站管理、使用者登入和購物車功能。
本教學課程系列詳細說明建置 ASP.NET MVC 音樂市集範例應用程式所採取的所有步驟。 第 6 部分涵蓋使用資料批註進行模型驗證。
我們的建立和編輯表單有重大問題:它們不會進行任何驗證。 我們可以執行一些動作,例如在 [價格] 欄位中保留必要的欄位空白或輸入字母,而我們會看到的第一個錯誤是來自資料庫。
我們可以藉由將資料批註新增至模型類別,輕鬆地將驗證新增至應用程式。 資料批註可讓我們描述我們想要套用至模型屬性的規則,ASP.NET MVC 會負責強制執行這些規則,並向使用者顯示適當的訊息。
將驗證新增至我們的相簿表單
我們將使用下列資料批註屬性:
- 必要 – 指出屬性是必要欄位
- DisplayName – 定義要用於表單欄位和驗證訊息的文字
- StringLength – 定義字串欄位的最大長度
- 範圍 – 提供數值欄位的最大值和最小值
- 系結 – 列出將參數或表單值系結至模型屬性時要排除或包含的欄位
- ScaffoldColumn – 允許隱藏編輯器表單中的欄位
*注意:如需使用資料批註屬性進行模型驗證的詳細資訊,請參閱 MSDN 檔,網址為 *https://go.microsoft.com/fwlink/?LinkId=159063
開啟 Album 類別,並將下列 using 語句新增至頂端。
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; }
[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; }
}
}
我們在該處時,也已將內容類型和藝術師變更為虛擬屬性。 這可讓 Entity Framework 視需要延遲載入它們。
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
將這些屬性新增至 [相簿] 模型之後,我們的 [建立和編輯] 畫面會立即開始驗證欄位,並使用我們選擇的 [顯示名稱] (例如[相簿藝術師 URL],而不是 [相簿藝術師 Url]) 。 執行應用程式並流覽至 /StoreManager/Create。
接下來,我們將中斷一些驗證規則。 輸入 0 的價格,並將 [標題] 保留空白。 當我們按一下 [建立] 按鈕時,會看到顯示驗證錯誤訊息的表單,其中顯示哪些欄位不符合我們定義的驗證規則。
測試Client-Side驗證
伺服器端驗證從應用程式的觀點來看非常重要,因為使用者可以規避用戶端驗證。 不過,只實作伺服器端驗證的網頁表單會顯示三個重要的問題。
- 使用者必須等候在伺服器上張貼、驗證表單,以及將回應傳送至其瀏覽器。
- 使用者在更正欄位時不會立即收到意見反應,因此現在會通過驗證規則。
- 我們正在浪費伺服器資源來執行驗證邏輯,而不是利用使用者的瀏覽器。
幸運的是,ASP.NET MVC 3 Scaffold 範本內建了用戶端驗證,不需要額外的工作。
在 [標題] 欄位中輸入單一字母符合驗證需求,因此會立即移除驗證訊息。