我有一堆由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中使用。
答案 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)
}