1. 程式人生 > >MVC 特性使用總結

MVC 特性使用總結

對於MVC模式的使用,現在是越來越廣泛,也有很多針對MVC的框架出現。之前在使用中是用的EF自動生產model,所以對於其可以使用的特性沒有過多的關注,對於特性可實現的內容也就沒有太多的關注,所以好多特性可實現的功能也都是通過其他方式來處理的。最近開始對以往知識進行梳理,才有了這篇文章的出現。通過查閱相關資料,網站才有了下的總結,如果有遺漏的也歡迎留言告知!


[Required] : 必須輸入

[Required]
public string UserName { get; set; }

同時可以新增提示資訊

 [Required(ErrorMessage ="請輸入使用者名稱")]
 public string UserName { get; set; }

[StringLength] : 限制字串長度;第一個是最大長度,必須的;後面的兩個都是可選的,可根據實際使用情況決定是否使用

[Required(ErrorMessage ="請輸入使用者名稱")]
[StringLength(100,ErrorMessage ="輸入內容長度在10到100之間",MinimumLength =10)]
public string UserName { get; set; }

[Range] : 限制取值範圍;第一個引數是最小值,第二個引數是最大值(包含他們本身);可以使用者int型別以及Double型別

[Range(0,100,ErrorMessage ="年齡超過了0~100範圍")]
public int Age { get; set; }

[RegularExpression] : 必須符合某個正則表示式

(1)直接使用RegularExpression來寫表示式

[RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "Email輸入錯誤")]
public string RegualarExpressionField { get; set; }

(2)自定義特性

public class EmailAttribute : RegularExpressionAttribute
{
     public EmailAttribute()
        : base(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")
     {
     }
}

[Compare]: 判等比較;驗證輸入的兩個資料是否完全相同;最典型的例子就是註冊時兩次輸入的密碼是否相同

public string OldPwd { get; set; }

[Compare("OldPwd", ErrorMessage = "密碼要相同")]
public string NewPwd { get; set; }

[Remote] : Ajax遠端驗證,返回值是bool型別 true表示驗證通過

[Remote("CheckUserName", "Account")]
public string UserName { get; set; }

控制器Control

public JsonResult CheckUserName(string userName)
{
     var result = userName == "admin";
     return Json(result, JsonRequestBehavior.AllowGet);
}

[Display]:作用顯示屬性名,用法是要配合HTML用於顯示字串的標籤一起使用的(@Html.LabelFor(s => s.Name))

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

[Display(Name ="使用者名稱")]
public string UserName { get; set; }

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

DataType是列舉型別有很多的HTML標籤型別

[Display(Name ="使用者名稱")]
[DataType(DataType.Text)]
public string UserName { get; set; }

[Bind]:使用BindAttribute的目的是限制使用者在提交form表單時使用合適且正確的值。當我們提交一個表單時,就會檢查每一個實體上繫結的特性

(1)在實體類中實現

[Bind(Exclude="Address")]
public class Employee
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
    public string PhoneNo { get; set; }
}

(2)直接在控制器的Action引數中

 [HttpPost]
 public ActionResult EmployeeRegister([Bind(Exclude ="Address")] Employee emp)
 {
      return View();
 }

 [HiddenInput]:如果我們想對使用者隱藏一些實體欄位,我們可以使用HiddenInput特性

[HiddenInput(DisplayValue=false)]
public string Name { get; set; }
[ValidateInput]:允許請求報文中出現危險標籤字元
[ValidateInput(false)]//關閉 請求報文中 危險標籤字元驗證
public ActionResult Add(Models.Student stu)
{
    if (!ModelState.IsValid)
    {
        return Content("驗證未通過~~~!");
    }
    return View();
}

[OutPutCache]:快取頁面

[OutputCache(Duration=20)]//設定頁面絕對快取  快取時間為 20秒
public ActionResult Index()
{
     //詳細程式碼
}

 [HandleError]:異常處理

[HandleError()]
public ActionResult CheckError()
{
     int a = 10;
     int b = 0;
     int k = a / b;
     return View();
}

在web.config檔案中,我們新增如下兩行:

<customErrors mode ="On" defaultRedirect ="Error.cshtml">
</customErrors>

在shared資料夾下建立一個檢視Error.cshtml,然後執行程式,如果執行上面的CheckError()方法,你剛建立的Error.cshtml將會顯示出來。

我們也可以使用HandleErrorAttribute給不同型別的異常顯示不同的檢視頁面。

[HandleError(ExceptionType=typeof(DivideByZeroException),View="DivideByZeroErrorView")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "NullRefrenceErrorView")]
public ActionResult CheckError()
{
     int a = 10;
     int b = 0;
     int k = a / b;
     return View();
}

注意:以上內容至少需要兩個名稱空間:1、using System.ComponentModel.DataAnnotations; 2、using System.Web.Mvc;