ASP.NET MVC框架提供了數據驗證的API,稱為"模型數據註解"或“模型元數據”,使我們可以使用聲明語法在模型中指定驗證的規則,常見的驗證API如下: 數據驗證API位於using System.ComponentModel.DataAnnotations;命名空間。 Movie.cs Ind ...
ASP.NET MVC框架提供了數據驗證的API,稱為"模型數據註解"或“模型元數據”,使我們可以使用聲明語法在模型中指定驗證的規則,常見的驗證API如下:
數據驗證API | 示例 | 說明 |
Compare | [Compare("MyOtherProperty")] | 兩個屬性值必須相同 |
Range | [Range(10,20)] | 屬性值必須在指定的數據範圍之內 |
RegularExpression | [RegularExpression("patttern")] | 屬性值必須匹配正則表達式 |
Required | [Required] | 屬性值必須非空或不能只是空格 |
StringLength | [StringLength(10)] | 屬性值長度不能超過給定的最大長度 |
數據驗證API位於using System.ComponentModel.DataAnnotations;命名空間。
Movie.cs
using System.ComponentModel.DataAnnotations; //引用命名空間 //影片信息類 public class Movie { //影片名稱 [Display(Name = "影片名稱")] [Required(ErrorMessage = "“{0}”必須填寫")] public string Title { get; set; } //上映時間 [Display(Name = "上映時間")] [Required(ErrorMessage = "“{0}”必須填寫")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } //光碟售價 [Display(Name = "光碟售價")] [Required(ErrorMessage = "“{0}”必須填寫")] [Range(typeof(decimal),"1","100",ErrorMessage = "“{0}”不在1-100以內")] //[DataType(DataType.Currency)] public decimal Price { get; set; } //評分 [Display(Name = "評分")] //[Required(ErrorMessage = "“{0}”必須填寫")] //[StringLength(10, ErrorMessage = "“{0}”的長度不能超過10")] [RegularExpression(@"^[0-9]*[1-9][0-9]*$", ErrorMessage = "“{0}”的長度不能超過2")] public string Rating { get; set; } }
Index.cshtml
<body> <h1>添加電影信息</h1> @using (Html.BeginForm()) { <p>影片名稱:@Html.TextBox("Title")</p> <p>上映時間:@Html.TextBox("ReleaseDate")</p> <p>光碟價格:@Html.TextBox("Price")</p> <p>影片評分:@Html.TextBox("Rating")</p> <input type="submit" id="submit" value="提交" /> @Html.ValidationSummary() <p>@ViewBag.Info</p> } </body>
HomeController.cs
public class HomeController : Controller { //GET訪問 /Home/Index public ActionResult Index() { return View(); } //模型綁定 //Post訪問 /Home/Index [HttpPost] public ActionResult Index(Movie m) { if (ModelState.IsValid) { ViewBag.Info = "電影" + m.Title + " ,上映時間" + m.ReleaseDate + " ,評分" + m.Rating + " ,價格" + m.Price; } return View(); } }
運行效果圖:
解釋:
在模型對象Movie類中,使用“數據註釋”的方式設定了每個屬性的驗證行為。
在視圖中,我們使用HTML輔助方法創建表單。同時,Html.ValidationSummary方法可以再頁面上集中顯示驗證提示。
在HomeController,創建了兩個版本的Index操作方法,無參數的Index用於顯示頁面,帶參數的Index負責處理Post請求。ModelState.IsValid屬性檢查模型對象每個屬性的驗證規則,如果驗證通過,則ModelState.IsValid返回True,否則返回False。
提醒:
如果需要實現JavaScript客戶端驗證,我們可以使用JQuery Validate驗證插件。我們知道如果視圖實現了客戶端驗證,一旦檢測輸入錯誤,頁面被禁止提交,表單不會發送到服務端,HTTP POST版本的Index方法將不會被調用。但是客戶端驗證不能替代服務端驗證,如果瀏覽器禁用JavaScript或發生網路攻擊,客戶端驗證將完全失去作用,此時服務端的模型驗證不了或缺,ModelState.IsValid方法將擔當審查的重任,決定驗證是否驗證通過。