コレクションを使用してメソッドをthis.ViewData.ModelMetadata.Properties呼び出しGetDisplayName、ヘッダー セルのコンテンツを生成できます。これをコードで一般的に行い、任意のモデルをテーブルとしてレンダリングします。
編集:これを拡張するために、テーブルとテーブルのみを表す基本モデルを使用します。私は3つのクラスを定義しています。TableRowCell' class, aTableRow' クラス (基本的にはオブジェクトのコレクション)TableRowCellとTableクラスがあります。
public class Table
{
public Table(String name)
{
this.Name = name;
this.ContentRows = new List<TableRow>();
this.HeaderRow = new TableRow();
this.FooterRow = new TableRow();
}
public IList<TableRow> ContentRows
{
get;
private set;
}
public TableRow FooterRow
{
get;
private set;
}
public TableRow HeaderRow
{
get;
private set;
}
public String Name
{
get;
private set;
}
}
テーブルに表示したいオブジェクトのコレクションを含むビュー モデルがある場合、最初にHtmlHelperそのコレクションをオブジェクトに変換する拡張機能を呼び出しTableます。ModelMetadataProviders.Current.GetMetadataForType(null, typeof(TModel)).Properties..Where(item => item.ShowForDisplay)そのメソッド内で、ヘッダー セルの生成に使用されるメタデータ オブジェクトのコレクションを取得するための呼び出しを反復処理します。次に、アイテムのコレクションを繰り返し処理し、呼び出しModelMetadataProviders.Current.GetMetadataForType(() => item, typeof(TModel)).Properties..Where(item => item.ShowForDisplay)て、コンテンツ セルの生成に使用されるメタデータ オブジェクトのコレクションを取得します。
技術的には、私のHtmlHelper拡張メソッドは実際には、html を生成するTableBuilderメソッドが呼び出されるオブジェクトを返します。Renderその設定は、これまでのところうまく機能しています。