0

私のASP.NET MVCアプリケーションには、テーブルをレンダリングする部分ビューがあります。

簡単に言えば、私の問題は、列ごとのプロパティ値ではなく、WebGrid のデータ ソース内の各オブジェクトのすべてのプロパティのすべての値が、テーブルの最初の列内に表示されることです。プロパティごとのセルの境界線が、それらをホストする最初の各列セル内に表示されます。

部分ビューのモデルは次のList<ReportTableEntry>場所にReportTableEntryあります。

public class ReportTableEntry
{
    public DateTime Time             { get; set; }
    public int      OpenedSessions   { get; set; }
    public int      ClosedSessions   { get; set; }
    public int      SnapshotSessions { get; set; }
    public int      TotalSessions    { get; set; }
}

部分ビュー呼び出しをレンダリングするビュー

@Html.Partial("Table", Model.TableEntries)

(ここで Model は、部分ビューのモデルではなく、親ビューのモデルを参照します)、ここで、Model.TableEntriesList であり、部分ビュー内では、Model の内容を調べると有効であるように見えます。

考えられるすべての組み合わせを試しました:

  • 親ビューのモデルを直接使用し、ソース: Model.TableEntries で WebGrid を作成しました。
  • 部分ビューで型付けされていないモデルを使用しようとしました。
  • グリッドの列名を指定し、デフォルト値を使用しました。
  • ReportTableEntry のプロパティを ColumnAttribute で装飾してみました。
  • スタイルの有無にかかわらず、列パラメーターの有無にかかわらず grid.Html を使用しました
  • ページング、ソートを切り替え、ajaxUpdateContainerId を追加/削除しました

それにもかかわらず、ReportTableEntry のすべてのプロパティ値は、最初のテーブル列内に詰め込まれています。

私が気づいたことの 1 つは、 grid.Columns() が空の配列を返すことです。

完全を期すために、これらの悪い結果を生み出す最も単純なバリエーションを次に示します。

@model List<ReportTableEntry>

<div id="reportDataDiv">
@{
    if (Model == null)
    {
        <p>No data to show</p>
    }
    else
    {
        var grid = new WebGrid(source:                Model, 
                               columnNames:           null, 
                               defaultSort:           "", 
                               rowsPerPage:           100, 
                               canPage:               true, 
                               canSort:               false, 
                               ajaxUpdateContainerId: "reportDataDiv");

        @grid.GetHtml()
    }
}
</div>

ここで何が欠けていますか?

4

1 に答える 1