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;