2012-03-20 8 views
2

リフレクション、DataAnnotationsおよびasp.mvcに問題があります。あるクラスから別のクラスへデータ注釈を抽出してコピーする方法(プロパティのコレクション)

私が定義したインタフェースのような:抽出されたプロパティを格納する必要があり

public class a : IFoo 
{ 
    public string Name { get; set; } 

    [MaxLength(50)] 
    public string P1 { get; set; } 
} 

public class b: IFoo 
{ 
    public string Name { get; set; } 

    [Required] 
    [MaxLength(100)] 
    public string P2 { get; set; } 
} 

//追加クラス:その後、私は、これらのインタフェースを実装し、いくつかのより多くのプロパティを追加したクラスを作成してい

public interface IFoo 
{ 
    string Name { get; set; } 
} 

クラスaまたはクラスbから。

public class AdditionalProperty 
{ 
    public string Name { get; set } 

    public string Value { get; set } 
} 

あなたはDataAnnotations属性を持ついくつかの追加のプロパティがあります見ることができるように。

したがって、問題は、DataAnnotationsメタデータを使用して追加のプロパティのコレクションを作成する方法です。

は、私は次のような結果を期待しています:

クラスの場合、A => ICollectionを= {{名= "P1"、値=ヌルを}} //しかしValueプロパティは、プロパティP1からDataAnnotationsを持つ必要があります。クラスB => ICollection = {{Name = "P2"、Value = null}} // BUT Valueプロパティは、プロパティP2のDataAnnotationsを持つ必要があります。

検証などでasp.mvcでモデルを作成するために必要です:

public class aspMvcModel 
{ 
    public ICollection<AdditionalProperty> ListOfProperties { get; set; } 
} 

それから私はasp.mvcビューでフォームを表示するには、このモデルクラスを使用することができます。

var classToScan = new a(); 
var properties = classToScan.GetType().GetProperties() 

しかし、私はどのようにさっぱりだが:

私はプロパティのリストを抽出する方法を知っていると私はクラスごと(簡略化されたコード)を唯一のユニークな特性を選択する方法を知っている -

あるクラスからAdditionalPropertyクラスのコレクションにデータ注釈をコピーします。

すべてのアイデア?

+0

これはなぜですか?間違った問題を解決しようとしているようです – Rajeesh

答えて

0

あなたの正確な問題は何かを理解することはできませんが、すべてのデータ注釈を取得するには、以下のコードを使用できます。それでも、あなたの正確な問題に言及することは良いでしょう。

var metaData = ModelMetadataProviders.Current.GetMetadataForType(null, Type.GetType("namespace.a")); 
      IDictionary<string, object> validationAttributes = helper.GetUnobtrusiveValidationAttributes("P1", metaData); 
関連する問題