Model元數據定製與Model模板

Model元數據定製與Model模板

 

  元數據這一詞對於計算機科學來講不算陌生,對元數據的解釋最簡單的解釋就是描述數據的數據,那麼Model元數據固然是描述Model中各類成員的數據了,在ASP.NET MVC中ModelMetadata這個類專門用於描述Model及其成員的信息,這樣就代表Model的描述須要一個ModelMetadata,Model裏面的各個屬性也須要ModelMetadata;換言之,ModelMetadata這個類有個自引用的現象,類的內部有個集合存儲ModelMetadata。其聲明以下html

IEnumerable<ModelMetadata> Properties

這是ModelMetadata的一個成員,它的成員有不少,按如今的認識就分了兩類,一種是包含上述屬性的用於描述數據基本信息用的屬性;一種是用於定製的屬性,那部分包含定製信息的屬性主要是用於呈如今View中或控制屬性顯示的模板。框架

  那麼用於描述數據基本信息用的屬性就有ide

類型post

屬性名學習

描述ui

Iemumerable<ModelMetadata>google

Propertiesurl

屬性成員的元數據集合spa

Typecode

ModelType

自己的類型

bool

IsComplexType

是否複雜類型

bool

IsNullableValueType

是否可空值

Type

ContainerType

父級類型

object

Model

本類的實例

string

PropertyName

在父類型中的屬性名稱

Dictionary<string,object>

AdditionalValue

存儲自定義屬性的字典集

ModelMetadataProvider

Provider

元數據的提供者

  在這個表中複雜類型這個詞要稍做解釋,其實也不算難,就是一個類型的值能經過字符串轉換過來的就算是簡單類型,反之則是複雜類型,例如整形(」1」),浮點型(」1.23」),日期(」2014-07-29」)等類型能經過字符串轉換獲得相應的(int,float,DateTime)類型的值,那麼這個類型就算是簡單類型,不然是複雜類型。

  另外一部分用做定製的屬性以下所示

類型 屬性名 定製的Attribute 描述 備註
string TemplateHint HiddenInputAttribute UIHintAttribute 指定動態數據用來顯示數據字段的模板或用戶控件。 兩個Attribute同時使用,後者具備更高的優先級
bool HideSurrounding   該特性用於指示是否應將屬性值或字段值呈現爲隱藏的 input 元素  
bool ShowForDisplay ScaffoldColumnAttribute   控制目標元素是否應該存在於基架之中  
bool ShowForEdit    
string DataTypeName DataTypeAttribute   指定要與數據字段關聯的附加類型的名稱。  
bool ConvertEmptyStringToNull DisplayFormatAttribute   指定 ASP.NET 動態數據如何顯示數據字段以及如何設置數據字段的格式。  
string NullDisplayText    
string DisplayFormatString    
string EditFormatString    
bool IsReadOnly EditableAttribute ReadOnlyAttribute EditableAttribute:指示數據字段是否可編輯;
ReadOnlyAttribute:指定該特性所綁定到的屬性是隻讀屬性仍是讀/寫屬性。
兩個Attribute同時使用,前者具備更高的優先級
string DisplayName DisplayAttribute DisplayNameAttribute 用於設置目標元素的顯示名稱 二者共同使用時,前者具備更高優先級
string ShowDisplayName   能夠爲實體分部類的類型和成員指定可本地化的字符串  
string Description    
int Order    
string watermark    
bool IsRequired RequiredAttribute   目標元素設置爲是否必需的數據成員  

  Model模板則是利用Model元數據的定製信息來給HtmlHelper<TModel>的模板方法以特定的形式把數據以及元數據生成Html展現出來。那麼這裏的模板有框架裏面預約義的模板,也能夠由開發人員本身去定義的模板。下面則介紹預約義的模板。

  預約義模板主要使用的是UIHintAttribute來設置,如前面介紹元數據定製中所描述的:用於指定動態數據用來顯示數據字段的模板或用戶控件。下面仍是以表格的形式展示各個預約義模板的使用還有結果。

 

模板名稱 使用形式 結果
EmailAddress [UIHint("EmailAddress")]或者
[DataType(DataType.EmailAddress)]
DisplayFor:<a href="mailto:foo@gmail.com">goo@gmail.com</a>
HiddenInput [UIHint("HiddenInput")] DisplayFor:1234567
    EditFor:<input id="Foo" name="Foo" type="hidden" value="1234567"/>
Html [UIHint("Html")]或者
[DataType(DataType.Html)]
DisplayFor:<a href="www.google.com">google.com</a>
Text [UIHint("Text")]或者
[DataType(DataType.Text)]
DisplayFor:Admin
String [UIHint("String")] EditFor:<input class="text-box single-line" id="Foo" name="Foo" type="text" value="Admin"/>
Url [UIHint("Url")]或者
[DataType(DataType.Url)]
DisplayFor:<a href="http://www.google.com">http://www.google.com</a>
MultilineText [UIHint("MultilineText")]或者
[DataType(DataType.MultilineText)]
EditFor:<textarea class="text-box multi-line" id="Foo" name="Foo">Admin</textarea>
Password [UIHint("Password")]或者
[DataType(DataType.Password)]
EditFor:<input class="text-box single-line password" id="Foo" name="Foo" type="password" value=""/>
Decimal [UIHint("Decimal")] Display:123.00
    EditFor:<input class="text-box single-line" id="Foo" name="Foo" type="text" value="123.00\"/>
Boolean [UIHint("Boolean")] Dislplay:<input id="Foo" name="Foo" type="checkbox" value="true" disable="true"/>
    EditFor:<input id="Foo" name="Foo" type="checkbox" value="true" disable="true"/>
<input name="Foo" type="hidden" value="false"/>
Collection [UIHint("Collection")] Display:各元素的Display形式
    EditFor:各元素的Edit形式
Object [DisplayName("城市")] DisplayForModel:<div class="display-label">城市</div>
<div class="display-field">佛山市</div>

 

  此時在一個以UserInfo類型爲強類型的視圖中調用@Html.DisplayForModel(),類的信息則會顯示出來。可是如果UserInfo中的屬性必定要是簡單類型的;

  若是要給類中的某個成員定製模板,如給DateTime類型再定義一個MyDateTime模板

@model DateTime
時間是 @Model.ToString("yyyy-MM-dd HH:mm:ss")

而後給相應的成員使用上標記

[DataType(「MyDateTime」)]

則可。

  目前這部份內容還沒學習完,通過後續的學習後會繼續補充此文,因爲還在學習,故會有理解得不恰當的地方,以上有什麼說的不對的請指正,有什麼好的建議或意見也請分享,謝謝!

相關文章
相關標籤/搜索