我有什么看起来(对我来说)是一个奇怪的问题......
我为SelectListItem创建了一个简单的编辑器模板(〜/ Views/Shared/EditorTemplates文件夹中的SelectListItem.cshtml),例如:
<ul class="select-list-item cell-15 col-3 omega clearfix">
@Html.EditorFor(c => c.Categories)
</ul>
Run Code Online (Sandbox Code Playgroud)
其中c.Categories是IEnumerable
这工作正常,但我想要另一个模板来呈现具有略微不同标记的集合,因此我将编辑器模板复制并重命名为,例如,"CategoryIcons.cshtm"并调用如下:
<ul class="select-list-item cell-15 col-3 omega clearfix">
@Html.EditorFor(c => c.Categories, "CategoryIcons")
</ul>
Run Code Online (Sandbox Code Playgroud)
简而言之,唯一的区别是我正在指定一个命名的编辑器模板.
当我打开页面时,我现在收到以下错误:
传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [System.Web.Mvc.SelectListItem]',但此字典需要类型为'System.Web.Mvc.SelectListItem'的模型项
两个模板ID中的模板模型声明:
@model System.Web.Mvc.SelectListItem
Run Code Online (Sandbox Code Playgroud)
我不明白为什么默认模板工作而命名模板不工作.任何帮助,将不胜感激.
谢谢.
这是令人费解的.为简单起见,想象一下具有.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会更好.谢谢.