2012-03-21 11 views
0

現在、私はというカスタム属性を使用してグリッドに表示するプロパティを装飾するasp.net mvc 3プロジェクトで作業しています。私は時々子クラスのグリッドに表示する必要があるいくつかのプロパティを持つ基本モデルを持っています。データアノテーションを使用して、子モデルのベースモデルプロパティに追加メタデータを追加できますか?

例:

public class BaseClass 
{ 
    public String Status { get; set; } 
} 

public class ChildClass : BaseClass 
{ 
    [Display(Name="Property 1")] 
    [ColumnHeading] 
    public String Property1 { get; set; } 

    [Display(Name = "Property 2")] 
    [ColumnHeading] 
    public String Property2 { get; set; } 
} 

これは前に(約3時間の周りに検索する)と、このことも可能かどうか尋ねてきたかどうかは知りませんが、基本クラスのプロパティに[ColumnHeading]属性を追加することができます子クラスでは?

public class ChildClass : BaseClass 
{ 
    public ChildClass() 
    { 
    // Fictional method to add attribute to property 
    AddAdditionalMetaData(Status, [ColumnHeading]); 
    } 
    ... 
} 

私はあなたが、基本クラスのプロパティvirtualを作るか、または基本と子クラスのビューモデルを作ることができることを知っているが、プロジェクトは基本クラスから継承する40の以上のモデルを持っており、約30の子供のクラスはこの基本クラスのプロパティを表示する必要があるので、ビューモデルは本当に1つのプロパティを追加する価値がありません。

第2に、私は何もしていない無限の繰り返しで終了するプロパティを何回か上書きする必要がありますが、これが唯一の方法であれば。私はそれをやる。

ご協力いただければ幸いです。

答えて

3
[AttributeUsage(AttributeTargets.Property, Inherited = true)] 
public class ColumnHeadingAttribute 
{ 
    ... 

AttributeUsageAttributeInheritedプロパティを参照してください。この属性がカスタム属性にある場合、それは子クラスに継承されます。その後、ベースビューモデルと子ビューモデルの間に中間ベースビューモデルを作成できます。

public class BaseClass 
{ 
    public virtual string Status { get; set; } 
} 

public abstract class IntermediateClass : BaseClass 
{ 
    [ColumnHeading] 
    public override string Status { get; set; } 
} 

public class ChildClass : IntermediateClass 
{ 
    public ChildClass() 
    { 
     // Status will inherit the ColumnHeading attribute from IntermediateClass 
    } 
    ... 
} 
+0

優秀だとは思わなかった。 – jacqijvv

関連する問題