MVC 模型驗證

  ASP.NET MVC框架提供了數據驗證的API,稱爲"模型數據註解"或「模型元數據」,使咱們能夠使用聲明語法在模型中指定驗證的規則,常見的驗證API以下:html

驗證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(); } }

 

  運行效果圖: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方法將擔當審查的重任,決定驗證是否驗證經過。

相關文章
相關標籤/搜索