1. 程式人生 > >ASP.NET MVC編程——模型

ASP.NET MVC編程——模型

找到 sage bool pda nbsp 字符串 轉載 存在 wid

1 ViewModel

是一種專門提供給View使用的模型,使用ViewModel的理由是實體或領域模型所包含的屬性比View使用的多或少,這種情況下實體或領域模型不適合View使用。

2模型綁定

默認模型綁定器

通過DefaultModelBinder解析客戶端傳來的數據,為控制器的操作參數列表賦值。

顯示模型綁定

使用UpdateModelTryUpdateModel顯示綁定模型,不會檢驗未綁定字段。

使用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編程——模型