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

更新: 您必须为 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++;
    }
}

More about binding Collections you can read there:Hancelman's blog

于 2012-09-07T18:38:29.913 回答
0

Remember that the IGrouping is also an IEnumerable. So instead of using @Html.EditorForModel(), enumerate over the items.

@model IGrouping<string, Model>

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