asp.net mvc3 的資料驗證(一)

來源:互聯網
上載者:User
對於web開發人員來說,對使用者輸入的資訊進行驗證是一個重要但是繁瑣的工作,而且很多開發人員都會忽略。asp.net mvc3架構使用的是叫做“資料註解”( DataAnnotations)的方式進行資料驗證。     這種方式允許程式在用戶端和伺服器端進行雙步驟驗證(asp.net的資料驗證控制項也是雙步驟驗證的)。雙步驟驗證的好處是 用戶端驗證會直接相應使用者,不用提交表單,也就減輕了伺服器的壓力還提高了使用者體驗;而伺服器端驗證是確保資料的有效性和完整性,因為有時候用戶端會關閉指令碼功能。      注意:要實現用戶端驗證,需要引用jquery以及jquery驗證檔案:
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script><script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script><script src="@Url.Conten("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    要實現伺服器端驗證,需要在提交表單後執行ModelState.IsValid   一、基礎驗證 1、Require(非空驗證) Model:
    [Required]        [Display(Name = "使用者名稱")]        public string UserName { get; set; }
驗證結果:

2、StringLength(字串長度驗證)         可以驗證model屬性的最大長度和最小長度,分別對應 MaximumLength和 MinimumLength,其中MinimumLength是可選的。 Model:

        [Required]        [StringLength(100, MinimumLength = 6)]        [DataType(DataType.Password)]        [Display(Name = "密碼")]        public string Password { get; set; }
驗證結果

3、RegularExpression(Regex)     驗證符合該Regex的屬性。 Model:

        [Required]        [DataType(DataType.EmailAddress)]        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9._]+\.[A-Za-z]{2,4}")]        [Display(Name = "電子郵件地址")]        public string Email { get; set; }
驗證結果:

  4、Range(數值範圍驗證)         用來指定數值的最大值和最小值,第一個參數是最小值,第二個參數是最大值(包含他們本身)。可以使用者int類型以及Double類型。 Model:

        [Required]        [Range(13, 18)]        [Display(Name="年齡")]        public int Age { get; set; }
驗證結果:

    二、附加驗證         附加驗證是System.Web.Mvc中額外添加的兩個驗證特性,所以使用時必須添加using System.Web.Mvc 1、Remote(遠程驗證)         雖然asp.net mvc3提供了很多在model中直接驗證資料的特性,但是很多邏輯複雜的驗證沒辦法在model中來驗證,所以mvc3架構提供了這個遠程驗證特性,他允許開發人員在Controller中用C#代碼來驗證資料的有效性。         一個很經典的應用時驗證使用者名稱是否重複。這個資料驗證沒辦法在用戶端驗證,除非將所有的使用者名稱都發往用戶端(顯然這是不可能的)。所以Remote特性只進行伺服器端驗證。但是它是通過非同步方式進行驗證,所以有更好的使用者體驗。   Model:

        [Required]        [Display(Name = "使用者名稱")]        [Remote("CheckUserName","Account")]        public string UserName { get; set; }
Controller:
        public JsonResult CheckUserName(string userName)        {            var result = userName == "admin";            return Json(result, JsonRequestBehavior.AllowGet);        }
驗證結果:         注意:如果要Post提交,則需要加上HttpMethod=“POST”:
    [Required(ErrorMessageResourceType=typeof(ErrorMessage),ErrorMessageResourceName="UserRequire")]        [Display(Name = "使用者名稱")]        [Remote("CheckUserName","Account", HttpMethod="POST")]        public string UserName { get; set; }

  而Controller中也可以直接接受Post的請求,當然你加上[Httppost]也是可以的:

        //[HttpPost]        public JsonResult CheckUserName(string userName)        {            var result = userName != "admin";            return Json(result, JsonRequestBehavior.AllowGet);        }
  2、Compare(相同驗證)         Compare特性是用來驗證輸入的兩個資料是否完全相同。最典型的例子就是註冊時兩次輸入的密碼是否相同。 Model:
        [Required]        [StringLength(100, ErrorMessage = "{0} 必須至少包含 {2} 個字元。", MinimumLength = 6)]        [DataType(DataType.Password)]        [Display(Name = "密碼")]        public string Password { get; set; }          [DataType(DataType.Password)]        [Display(Name = "確認密碼")]        [Compare("Password", ErrorMessage = "密碼和確認密碼不匹配。")]        public string ConfirmPassword { get; set; }
驗證結果:

          上面的是asp.net mvc3架構的幾種常用的資料註解,除了後兩種mvc特有的特性,其他的特性都在System.ComponentModel.DataAnnotations中,恰當的使用會大大提高開發效率。具體的參見: http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.