相关疑难解决方法(0)

MVC EditorFor问题命名模板

我有什么看起来(对我来说)是一个奇怪的问题......

我为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)

我不明白为什么默认模板工作而命名模板不工作.任何帮助,将不胜感激.

谢谢.

editortemplates razor asp.net-mvc-3

21
推荐指数
2
解决办法
1万
查看次数

编辑器在没有@foreach的情况下不渲染可枚举

这是令人费解的.为简单起见,想象一下具有.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集合回到我的其他控制器操作.

有关实现以下目标所需要的任何想法?

  • 使用列表中的每个实例呈现具有唯一ID的子集合
  • 使用模型将子集合发回

我不在乎我是否必须自己列举它,也不管它是在EditorTemplate内部还是外部; 我刚刚看到它说这是不必要的,如果你让它处理事情,MVC会更好.谢谢.

asp.net-mvc mvc-editor-templates razor asp.net-mvc-4

3
推荐指数
1
解决办法
2190
查看次数