ASP.NET MVC框架提供了數據驗證的API,稱爲"模型數據註解"或「模型元數據」,使咱們能夠使用聲明語法在模型中指定驗證的規則,常見的驗證API以下:html
數據驗證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(); } }
運行效果圖:ui
解釋:spa
在模型對象Movie類中,使用「數據註釋」的方式設定了每一個屬性的驗證行爲。插件
在視圖中,咱們使用HTML輔助方法建立表單。同時,Html.ValidationSummary方法能夠再頁面上集中顯示驗證提示。code
在HomeController,建立了兩個版本的Index操做方法,無參數的Index用於顯示頁面,帶參數的Index負責處理Post請求。ModelState.IsValid屬性檢查模型對象每一個屬性的驗證規則,若是驗證經過,則ModelState.IsValid返回True,不然返回False。orm
提醒:
若是須要實現JavaScript客戶端驗證,咱們能夠使用JQuery Validate驗證插件。咱們知道若是視圖實現了客戶端驗證,一旦檢測輸入錯誤,頁面被禁止提交,表單不會發送到服務端,HTTP POST版本的Index方法將不會被調用。可是客戶端驗證不能替代服務端驗證,若是瀏覽器禁用JavaScript或發生網絡攻擊,客戶端驗證將徹底失去做用,此時服務端的模型驗證不了或缺,ModelState.IsValid方法將擔當審查的重任,決定驗證是否驗證經過。