1

ヘッダーでグループ化したアイテムがたくさんあります。

ヘッダー テキストの後に個々の項目のエディター テンプレートが続くページにそれらを表示したいと思います。

次のようにネストされたテンプレートを使用してみました:

メインページ:

@Html.EditorFor(x => x.GroupedItems, "ListofGrouping");

ListofGrouping エディター テンプレート:

@model IList<IGrouping<string, Model>>
@for(int i = 0; i < Model.Count(); i++)
{
    @Html.EditorFor(x => x[i],"IGrouping")
}

IGrouping エディター テンプレート:

@model IGrouping<string, Model>

@Html.DisplayFor(x => x.Key)
@Html.EditorForModel()

これは最後の行まで機能します。すべてのヘッダー値を取得しますが、個々の項目は表示されません。

この方法で動作させることができない場合は、データ グリッドを使用してそこでグループ化を行いますが、これは MVC3 で可能であると考えました。

4

2 に答える 2

0

IGroupingIEnumerableであることを思い出してください。したがって、を使用する代わりに@Html.EditorForModel()、アイテムを列挙します。

@model IGrouping<string, Model>

@Html.DisplayFor(x => x.Key)
foreach (var grp in Model)
{
    @Html.EditorFor(model => grp)
}
于 2012-09-08T00:59:10.213 に答える
0

更新: IGrouping 用に独自の EditorTemplate を作成する必要があります。

IGrouping の EditorTemplate のサンプル: モデル:

public class Row
{
    public Row()
    {
    }

    public Row(string key, int value)
    {
        Key = key;
        Value = value;
    }

    public int Value { get; set; }

    public string Key { get; set; }
}

コントローラ:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";
        IEnumerable<Row> dict = new[] { new Row("1", 1), new Row("1", 2), new Row("1", 3), new Row("2", 2), new Row("2", 3), new Row("2", 4) };
        var grouped = dict.GroupBy(c => c.Key).First();
        //var grouplist = grouped.Select(c => new KeyValuePair<string, IEnumerable<int>> (c.Key, c.Select(b=>b.Value)));
        return View(grouped);
    }

    public ActionResult Post(IEnumerable<Row> Model)
    {
        return null;
    }
}

ビュー インデックス:

@model IGrouping<string, MvcApplication1.Models.Row>
@{
    ViewBag.Title = "Home Page";
}

@using(Html.BeginForm("Post", "Home", FormMethod.Post))
{
    @Html.EditorForModel("IGrouping")
    <button type="submit">Submit</button>
}

EditorTemplate IGrouping.cshtml:

@model IGrouping<string, MvcApplication1.Models.Row>
@{
    @Html.DisplayFor(m => m.Key)
    int i = 0;
    foreach (var pair in Model.Select(c => c))
    {
        @Html.Hidden(string.Format("Model[{0}].Key", i), pair.Key)
        @Html.TextBox(string.Format("Model[{0}].Value", i), pair.Value)
        i++;
    }
}

そこで読むことができるコレクションのバインディングの詳細: Hancelman のブログ

于 2012-09-07T18:38:29.913 に答える