MVC學習十:MVC 特性作用和MVC 驗證


根據代碼分析特性用處

1 [DisplayName("學員名")]
2 [DataType(DataType.Text)]
3 [StringLength(4,ErrorMessage="您輸入的名字太長了~~~~")]
4 public string Name { get; set; }

[DisplayName("學員名")]作用顯示屬性名,用法是要配合HTML用於顯示字符串的標簽一起使用的(@Html.LabelFor(s => s.Name))

效果:@Html.LabelFor(s => s.Name)在HTML代碼中的 <label>學員名</label>

如果這個屬性沒有DisplayName特性顯示效果:<label>Name</label>

[DataType(DataType.Text)]用作屬性以什么HTML標簽顯示,用法必須和@Html.EditorFor(s => s.Name)一起使用

DataType是枚舉類型有很多的HTML標簽類型。

③MVC特性控件驗證

一、驗證准備

第一步是要在web.config里啟用客戶端驗證,這在MVC3自帶的模板項目中已經有了:

<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>

然后在被驗證的View頁面上要加入這樣兩個JavaScript,注意,他們是依賴於JQuery的:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

驗證消息的顯示有兩種,一種是ValidationSummary,它可以顯示一份驗證消息的匯總,包括從后台Action里返回的消息。

@Html.ValidationSummary()

另一種是Model中各屬性對應HTML控件的驗證消息:

@Html.ValidationMessageFor(m => m.UserName)
二、客戶端驗證
基礎驗證
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(正則表達式)
    驗證符合該正則表達式的屬性。
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; }
復制代碼
驗證結果:

自定義錯誤信息

如果驗證的特性中還有其他參數,那么ErrorMessage可以用占位符直接顯示其他參數,如
Model:
復制代碼
        [Required]

        [StringLength(100, ErrorMessage = "請輸入{2}到{1}位的{0}。", MinimumLength = 6)]

        [DataType(DataType.Password)]

        [Display(Name = "密碼")]

        public string Password { get; set; }
復制代碼

 

驗證結果:

三、服務端驗證

//服務器端 驗證(根據實體類屬性的 驗證特性來檢查)
if (!ModelState.IsValid)

四、特性補充

緩存頁面

①Controller 或Action上打[OutPutCache]特性即可

在Controller上加OutputCache特性時,Controller下的所有的Action都將實現此特性。如果同時Action也有此特性時,以Action為標准,Action的粒度更精細。

        //[OutputCache(Duration=20,VaryByParam="id")]
        /// <summary>
        /// OutputCache特性 相當於 aspx的整頁緩存,默認為 絕對過期時間
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            return View(); //Content(DateTime.Now.ToString());
        }
②輸出緩存CacheProfile使用配置文件設置緩存
<!---CacheProfile配置文件中設置緩存-->  
  <caching>  
    <outputCacheSettings>  
      <outputCacheProfiles>  
        <add name="exampleCacheProfile" duration="20" location="Any" enabled="true"/>  
      </outputCacheProfiles>  
    </outputCacheSettings>  
  </caching>   
<!---CacheProfile配置文件中設置緩存end-->  

 允許請求報文中出現危險標簽字符

[ValidateInput(false)]//關閉 請求報文中 危險標簽字符驗證
        public ActionResult Add(Models.Student stu)
        {
            if (!ModelState.IsValid)
            {
                return Content("驗證未通過~~~!");
            }
            return View();
        } 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM