7

Index ビューの自動スキャフォルダーを作成しようとしています。モデルまたはビューモデル (例: ) のコレクションを渡して、見出し (要素) とセル (要素)IEnumerable<MyViewModel>の属性を使用する HTML テーブルを取得できるようにしたいと考えています。各行は、コレクション内の 1 つのアイテムに対応する必要があります。DisplayNamethHtml.Display(propertyName)td

詳細ビューのように 1 つのレコードのみを表示する場合はViewData.ModelMetadata.Properties、特定のモデルのプロパティのリストを取得するために使用します。しかし、ビューに渡すモデルがモデルまたはビュー モデル オブジェクトのコレクションであり、モデルまたはビュー モデル自体ではない場合はどうなるでしょうか。

コレクション内の特定のアイテムの ModelMetadata を取得するにはどうすればよいですか?

4

1 に答える 1

6

単純な拡張メソッドがその仕事をするかもしれません:

public static class MyExtensions
{
    public static ModelMetadata GetMetadata<TModel>(this TModel model)
    {
        return ModelMetadataProviders.Current.GetMetadataForType(null, typeof(TModel));
    }
}

そしてあなたの見解では:

<%@ Page 
    Language="C#"
    Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<MyViewModel>>" %>

<%-- Get metadata for the first item in the model collection --%>
<%= Html.Encode(Model.ElementAt(0).GetMetadata().ModelType) %>
于 2010-03-14T08:56:26.083 に答える