asp.net-mvc-3 - MVC编辑器问题对于命名模板

标签 asp.net-mvc-3 razor editortemplates

我有(无论如何对我来说)似乎是一个奇怪的问题...

我为SelectListItem(〜/ Views / Shared / EditorTemplates文件夹中的SelectListItem.cshtml)创建了一个简单的编辑器模板,例如:

<ul class="select-list-item cell-15 col-3 omega clearfix">
    @Html.EditorFor(c => c.Categories)
</ul>

其中c.Categories是IEnumerable

这个工作正常,但是我想要另一个模板以稍微不同的标记呈现集合,因此我将编辑器模板复制并重命名为“CategoryIcons.cshtm”,并按如下方式调用:
<ul class="select-list-item cell-15 col-3 omega clearfix">
    @Html.EditorFor(c => c.Categories, "CategoryIcons")
</ul>

简而言之,唯一的区别是我指定了一个命名的编辑器模板。

当我打开页面时,现在出现以下错误:

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[System.Web.Mvc.SelectListItem]', but this dictionary requires a model item of type 'System.Web.Mvc.SelectListItem'



模板的模型声明,在两个模板id中:
@model System.Web.Mvc.SelectListItem

我不明白为什么默认模板有效,而命名模板无效。任何帮助,将不胜感激。

谢谢。

最佳答案

当您调用@Html.EditorFor(c => c.Categories)时,它会退回到IEnumerable的默认模板。此默认模板由MVC框架提供,其行为是为枚举中的每个项目输出Html.EditorFor()。依次为列表中的每个项目分别发出适当的编辑器模板-在您的情况下,它们都是SelectListItem的实例,因此在第一种情况下,SelectListItem模板用于每个项目。

在第二种情况下,通过显式设置EditorFor以使用特定的编辑器模板CategoryIcons,您要告诉它在整个枚举中使用该编辑器模板,而不是默认情况下不允许将可枚举用作模板,而依次对每个模板使用模板枚举项。

我尚不确定目前最好的方法。

一种方法是定义一个CategoryIcons模板,该模型的模型是IEnumerable<CategoryIcon>的实例,该模板简单地提供Model枚举,并为每个项目执行Html.EditorFor,并且使用明确的模板引用CategoryIcon。然后,将每个项目的编辑器模板放在该模板中(CategoryIcon而不是CategoryIcons)。然后,您可以通过执行@Html.EditorFor(c => c.Categories, "CategoryIcons")来调用它。

我将环顾四周,看看是否有更好的方法可以完成此操作,但是我希望这可能对现在有用。如果可以对模板进行参数化,那就太好了,因此您可以编写一个IEnumerable模板,该模板将要用于其每个项目的模板名称作为参数。

关于asp.net-mvc-3 - MVC编辑器问题对于命名模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818351/

相关文章:

jquery - 从 jQuery Grid 插件将额外参数传递给 ASP.NET MVC Controller 操作

asp.net-mvc - ASP.NET EditorTemplate下拉列表

asp.net-mvc - 从编辑器模板中的自定义属性获取值

asp.net-mvc - ASP.NET MVC 3 - 部分、显示模板与编辑器模板

c# - 将多个字段绑定(bind)到 MVC 3 View 模型的同一属性

c# - 当 SignalR 一次建立 8-10 个连接时,实时聊天不起作用

c# - 将复选框字段添加到基于数据表的表 MVC 4 Razor

html - 如何将原始 html 文件包含到 razor View 中

javascript - Jquery 在 cshtml 页面中不工作

asp.net-mvc - ASP.NET MVC 3 : Which dll's need to be deployed?