2013-03-06 57 views
0

我有一個從Web服務生成的部分類。我想補充ModelMetadata這一類,像這樣:使用ModelMetadata獲取所有屬性

// Automatically generated code 

public partial class MyClass 
{ 
    public string FIELD_ONE ... 
    public DateTime? FIELD_TWO ... 
} 

// My code 

[MetadataType(typeof(MyMetaDataClass))] 
public partial class MyClass 
{ 
} 

public class MyMetaDataClass 
{ 
    [Display(Name="Field One")] 
    public string FIELD_ONE; 

    [Display(Name="Field Two")] 
    public DateTime? FIELD_TWO; 
} 

現在我想獲得的MyClass其中有元數據顯示屬性,即FIELD_ONEFIELD_TWO的所有屬性。

我試過的東西

typeof(MyClass).GetProperties().Where(p => Attribute.IsDefined(typeof(DisplayAttribute)) 

但當然的屬性是不上MyClass屬性。我也試過:

ModelMetadata mmd = ModelMetadata.FromLambdaExpression(m => pi.GetValue(m, null), Html.ViewData); 

但我得到的錯誤「模板只能與現場訪問,訪問屬性,一維數組的索引,或單參數自定義索引表達式中使用。」

如果我能從MyClass獲得MyMetadataClass,那麼我可能會獲得該屬性的名稱並從MyClass獲取同名的屬性。

這是可能的,還是我吠錯了樹?

+0

檢查這這一點,我已經在這裏 http://stackoverflow.com/a/24757520/3050647 – elia07 2014-07-15 12:18:56

回答

1

你究竟想要做什麼?如果您想覆蓋默認元數據提供程序的功能,那麼您最好用您自己的實施替換DataAnnotationsModelMetadataProvider。下面是一些示例代碼:

http://buildstarted.com/2010/09/14/creating-your-own-modelmetadataprovider-to-handle-custom-attributes/

在這裏,筆者是增加了自己的自定義屬性的支持,但是你可以很容易地覆蓋爲DisplayAttribute默認implemntation。

如果這沒有幫助,請詳細說明您要實現的目標。

+0

在這個例子中回答了這個問題,我希望能夠通過'FIELD_ONE'迭代和'上FIELD_TWO' 'MyClass'對象自動。 – 2013-03-06 14:32:10