如何显示IEnumerable <igrouping <string,model =“”>&gt;使用编辑器模板</igrouping <string,>

时间:2012-09-07 18:25:52

标签: c# asp.net-mvc asp.net-mvc-3 mvc-editor-templates igrouping

我有一堆由Header分组的项目。

我想在页面上显示它们,标题文本后跟每个项目的编辑器模板。

我尝试使用嵌套模板,如下所示:

主页:

@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 Editor Template:

@model IGrouping<string, Model>

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

直到最后一行。我得到了所有标题值,但没有显示各个项目。

如果我无法以这种方式工作,我将只使用数据网格并在那里进行分组,但我认为这应该可以在MVC3中使用。

2 个答案:

答案 0 :(得分:0)

<强>更新 您必须编写自己的EditorTemplate进行IGrouping。

用于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's blog

答案 1 :(得分:0)

请记住, IGrouping 也是 IEnumerable 。因此,不要使用@Html.EditorForModel(),而是枚举项目。

@model IGrouping<string, Model>

@Html.DisplayFor(x => x.Key)
foreach (var grp in Model)
{
    @Html.EditorFor(model => grp)
}