3

したがって、ユーザーごとにカスタマイズ可能なメタ データ項目のリストを含むモデルがあります。

public class MyModel {
    public int ID { get; set; }
    public String Name { get; set; }
    public DateTime Created { get; set; }

    // Need to diplay each as a column
    public List<MetaData> Data { get; set; }
}
public class MetaData {
    public int ID { get; set; }
    public String Name { get; set; }
    public String Label { get; set; }
    public String Value { get; set; }
}

MyModel の各メタデータ項目に対して、列名としての名前、ヘッダーとしてのラベル、および各 MyModel に対して出力される値を持つ列を WebGrid に追加する必要があります。

@{
    WebGrid grid = new WebGrid(source: Model, rowsPerPage: 5, canPage: true);

    List<WebGridColumn> cols = new List<WebGridColumn>();
    cols.Add(grid.Column("Name", "Name"));
    cols.Add(grid.Column("Created"));
    for (int i = 0; i < Model.FirstOrDefault().Data.Count; i++)
    {
        cols.Add(grid.Column(Model.FirstOrDefault().Data[i].Name, Model.FirstOrDefault().Data[i].Label,
            format: item => @<text>@item.Data[i].Value</text>
        ));
    }
}

@grid.GetHtml(
    tableStyle: "table",
    htmlAttributes: new { id = "MyGrid" },
    columns: cols)

メタデータ列はすべての MyModel 間で共有されるため、それぞれに新しい列セットはありません。名前とラベルは、異なる MyModel 全体で同じになります。誰かが助けることができれば、それは大歓迎です。

4

1 に答える 1

2

ラムダ構文が複雑になりすぎたら、使用に切り替えることができますHtml.Raw。また、ランタイムが の最後の値を使用しようとしているため、インデックスに一種の「変更されたクロージャ」iの問題があるようですi。これは私のために働く:

for (int i = 0; i < Model.First().Data.Count; i++)
{
    int local = i;
    cols.Add(grid.Column(Model.First().Data[i].Name, Model.First().Data[i].Label, 
        format: item => Html.Raw("<text>" + item.Data[local].Value + "</text>")
    ));
}

編集

「フォーマット」ラムダでのハッキング...これも明らかに機能します:

format: item => @item.Data[local].Value
于 2013-08-19T18:29:35.620 に答える