这比较莫名其妙。为简单起见,想象一个具有 .Employees 可枚举属性的公司实体。我在 SO 的其他地方看到,让 EditorTemplates 明智地呈现可枚举的技巧是使用如下语法:
在 Index.cshtml 中:
@Html.EditorFor(company => company.Employees, "EmployeeEditorTemplate")
EmployeeEditorTemplate.cshtml 需要一个员工:
@model MyNamespace.Models.Employee
//...
@Html.EditorFor(x => x.FullName)
// ...etc.
像这样的帖子:Viewmodels List Is Null in Action ...表明模型绑定器足够聪明,可以动态找出绑定并索引可枚举。我得到了不同的结果(如果 modelbinder 不应该如此神奇,这正是我所期望的):
The model item passed into the dictionary is of type
System.Collections.Generic.List`1[MyNamespace.Models.Employee]',
but this dictionary requires a model item of type
'MyNamespace.Models.Employee'.
自己枚举它可以很好地呈现集合,但会为每一行的控件发出相同的 id(当然,这不是最佳的,但它告诉我 EditorTemplate 在功能上是正确的):
@foreach (var item in Model.Employees)
{
@Html.EditorFor(x => item, "EmployeeEditorTemplate")
}
此构造也无法将 company.Employees 集合发布回我的其他控制器操作。
关于实现以下目标需要什么的任何想法?
- 使用列表中每个实例的唯一 ID 呈现子集合
- 将子集合与模型一起发布回来
我不在乎是否必须自己枚举它,也不在乎它是在EditorTemplate内部还是外部;我刚刚看到它说这是不必要的,如果让 MVC 处理事情,它会更好地工作。谢谢。