首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC ModelMetadata 入門:層次化結構與樹狀遞迴描述

     編輯:關於ASP.NET

ModelMetadata 不僅描述模型型別本身,更以樹狀結構遞迴描述所有屬性成員(含複雜型別的子屬性)。本文介紹 ModelMetadata 階層架構、Properties 集合與容器關係,為後續模板、驗證、繫結奠定基礎。

一、模型中繼資料層次化結構

public class Contact
{
    public string Name { get; set; }
    public string PhoneNo { get; set; }
    public string EmailAddress { get; set; }
    public Address Address { get; set; } // 複雜型別屬性
}

public class Address
{
    public string Province { get; set; }
    public string City { get; set; }
    public string District { get; set; }
    public string Street { get; set; }
}

Contact 的 ModelMetadata 包含:

  • 型別層級中繼資料
  • 四個屬性的 ModelMetadata(Name、PhoneNo、EmailAddress、Address)
  • Address 屬性的 ModelMetadata 再包含四個子屬性(Province、City、District、Street)

Contact ModelMetadata 樹狀結構圖

二、ModelMetadata 類別定義與 UML

public class ModelMetadata
{
    public virtual IEnumerable<ModelMetadata> Properties { get; }
    // 其他屬性:ModelType, PropertyName, DisplayName, IsRequired, DataTypeName, TemplateHint...
}

ModelMetadata UML 類別圖

關鍵概念:

  • 容器:型別層級的 ModelMetadata 為屬性層級的容器
  • 遞迴描述:Properties 集合元素同為 ModelMetadata,支援任意深度巢狀
  • 僅屬性:不包含欄位,符合 MVC 僅繫結公開屬性的慣例

三、應用場景

  1. 模板渲染:EditorForModel 遞迴走訪 Properties 產生完整表單
  2. 模型驗證:驗證器遍歷樹狀結構執行所有層級驗證規則
  3. 模型繫結:繫結器依屬性路徑(如 Address.City)從請求提取值
  4. Metadata 客製化:透過 IMetadataAware 可針對樹中任一節點修改中繼資料

理解樹狀結構是掌握 MVC 模型中繼資料系統的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved