Pau*_*ith 3 asp.net-mvc mvc-editor-templates razor asp.net-mvc-4
这是令人费解的.为简单起见,想象一下具有.Employees可枚举属性的Company实体.我已经在其他地方看到,使EditorTemplates能够合理地呈现可枚举的技巧是使用这样的语法:
在Index.cshtml中:
@Html.EditorFor(company => company.Employees, "EmployeeEditorTemplate")
Run Code Online (Sandbox Code Playgroud)
EmployeeEditorTemplate.cshtml需要一名员工:
@model MyNamespace.Models.Employee
//...
@Html.EditorFor(x => x.FullName)
// ...etc.
Run Code Online (Sandbox Code Playgroud)
像这样的帖子:Viewmodels列表在行动中是空的 ...表明模型绑定器足够聪明,可以找出绑定并动态索引可枚举.我得到了不同的结果(正如我所期望的那样,如果模型绑定器不应该是如此mageriffic):
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'.
Run Code Online (Sandbox Code Playgroud)
自己枚举它会使集合很好,但是为每一行的控件发出相同的id(当然,这不是最佳的,但它告诉我EditorTemplate在功能上是正确的):
@foreach (var item in Model.Employees)
{
@Html.EditorFor(x => item, "EmployeeEditorTemplate")
}
Run Code Online (Sandbox Code Playgroud)
此构造也无法发布company.Employees集合回到我的其他控制器操作.
有关实现以下目标所需要的任何想法?
我不在乎我是否必须自己列举它,也不管它是在EditorTemplate内部还是外部; 我刚刚看到它说这是不必要的,如果你让它处理事情,MVC会更好.谢谢.
Per @ David-Tansey(来自这个答案 - 请参阅更详细的解释):
(改为适合这个问题):
当您使用
@Html.EditorFor(c => c.Employees)MVC约定时,选择默认模板IEnumerable.此模板是MVC框架的一部分,它Html.EditorFor()为枚举中的每个项生成的内容.然后,该模板为列表中的每个项目单独生成相应的编辑器模板 - 在您的情况下,它们都是Employee的实例,因此,Employee模板用于每个项目.
综上所述他对当您使用命名模板的解释,你是,实际上,经过整个IEnumerable<Employee>一个模板期待一个单一的Employee使用@Html.EditorFor(company => company.Employees, "EmployeeEditorTemplate").
注意:我真的只回答了这个,因为它没有答案,我先在这里跌跌撞撞.至少现在有人不关闭它,可能会错过答案,而不必经历重复问题投票的严峻考验,等等等等.
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |