ASP.NET MVC編程——模型
1 ViewModel
是一種專門提供給View使用的模型,使用ViewModel的理由是實體或領域模型所包含的屬性比View使用的多或少,這種情況下實體或領域模型不適合View使用。
2模型綁定
默認模型綁定器
通過DefaultModelBinder解析客戶端傳來的數據,為控制器的操作參數列表賦值。
顯示模型綁定
使用UpdateModel和TryUpdateModel顯示綁定模型,不會檢驗未綁定字段。
使用UpdateModel方法綁定模型時,如果綁定失敗就會拋異常,而TryUpdateModel不會。
驗證模型綁定成功與否
使用ModelState.IsValid
獲取表單數據
為獲得表單數據,使用類型為FormCollection的參數作為操作參數。
清空模型綁定狀態
使用ModelState.Clear();清空模型綁定狀態以後,驗證失敗的信息就不會顯示到視圖上,即使在視圖中使用@Html.ValidationSummary()方法。
限制默認的綁定規則
使用BindAttribute屬性修飾參數或操作。
public class MyModel { public string Filed1 { set; get; } public string Filed2 { set; get; } } public ActionResult About([Bind(Include = "Filed1")]MyModel mm) { //具體代碼 } 或 [Bind(Include = "Filed1")] public ActionResult About(MyModel mm) { //具體代碼 }
3 模型修飾
在模型屬性上使用一些特性,達到修飾模型屬性或驗證屬性的目的
特性名稱 |
描述 |
備註 |
StringLength |
設置字符串允許的最大長度 |
|
Required |
標記字段為必填字段 |
|
RegularExpression |
必須滿足指定的正則表達式 |
|
Range |
規定數字的範圍 |
|
CustomValidation |
自定義驗證規則 |
|
DisplayName |
設置字段的顯示名稱 |
|
Compare |
比較兩個字段是否一致 |
可用於確認第二次輸入是否與第一次一致 |
MinLength |
設置數組或字符串最小長度 |
|
MaxLength |
設置數組或字符串最大長度 |
|
Remote |
通過控制器操作驗證指定字段 |
public RemoteAttribute(string action, string controller); |
例:
1)指定許可的範圍
public class ModelF { public string Field { get; set; } [Range(typeof(DateTime), "1/1/2018", "1/1/2019")] public DateTime Field2 { get; set; } }
2)使用占位符
[StringLength(100, ErrorMessage = "{0} 必須至少包含 {2} 個字符。", MinimumLength = 6)] public string NewPassword { get; set; }
4擴展
自定義註解
創建自定義特性,繼承自ValidationAttribute,ValidationAttribute有兩個虛方法,可以通過重載這兩個虛方法來完成自定義驗證邏輯。
public virtual bool IsValid(object value);
protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
例:
public class CustomValidationAttribute : ValidationAttribute { public CustomValidationAttribute() : base("{0} 驗證失敗的緣由") { } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value != null) { //驗證邏輯 //驗證失敗,返回錯誤信息 string errorMessage = FormatErrorMessage(validationContext.DisplayName); return new ValidationResult(errorMessage); } return ValidationResult.Success; } }
5 原理
傳入操作的數據存在於HTTP請求的請求URL,消息頭,消息體。當操作帶有參數時,MVC框架使用模型綁定器(默認的或自定義的)在Http請求中查找數據,用於構建控制器操作的參數列表。
驗證發生的時間
模型驗證是在操作執行之前完成的。當模型綁定器使用新值對模型屬性更新後,會利用當前模型元數據獲得模型驗證器,模型驗證器會找到所有施加於模型屬性的特性並執行驗證邏輯,然後模型綁定器會捕獲所有失敗的驗證規則,並將它們放入模型狀態中。
模型狀態
模型狀態包含了模型綁定期間綁定的值,和模型綁定期間發生的任何錯誤。
參考:
1.Jess Chadwick/Todd Snyder/Hrusikesh Panda,徐雷/徐揚
譯。ASP.NET MVC4 Web編程
2.Jon Galloway/Phil Haack/Brad Wilson/K. Scott Allen,孫遠帥/鄒權譯 ASP.NET MVC4 高級編程(第四版)
3.黃保翕,ASP.NET MVC4開發指南
4.蔣金楠,ASP.NET MVC4框架揭秘
5.https://www.asp.net/mvc
-----------------------------------------------------------------------------------------
轉載與引用請註明出處。
時間倉促,水平有限,如有不當之處,歡迎指正。
ASP.NET MVC編程——模型