12

ある種のデータをエクスポートする (ファイルをビルドする) 必要があるため、データはビューによって生成 (レンダリング) されるのではなく、ビュー以外の純粋な C# コードによって生成されます。しかし、ModelMetadata 情報が必要です。

また、単体テスト内で ModelMetadata を構築する方法も尋ねます。

4

1 に答える 1

19

いくつかのメタデータを含むビュー モデルがあると仮定します。

public class MyViewModel
{
    [DisplayName("Bar")]
    public string Foo { get; set; }
}

このメタデータは次のように取得できます。

ModelMetadata metadata = ModelMetadata.FromLambdaExpression<MyViewModel, string>(
    x => x.Foo, 
    new ViewDataDictionary<MyViewModel>()
);

Assert.AreEqual("Bar", metadata.DisplayName);

アップデート:

コメント セクションで要求されているように、実行時に型のみがわかっている場合にメタデータを取得する方法は次のとおりです。

var type = typeof(MyViewModel);
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, type);

子プロパティのメタデータを取得する場合は、プロパティの名前を指定するだけです:

var type = typeof(MyViewModel);
var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(null, type, "Foo");
于 2012-07-19T05:39:44.647 に答える