我有(无论如何对我来说)出现的东西是一个奇怪的问题...

我为selectListItem(〜/views/views/shared/editotplates文件夹中的selectListItem.cshtml)创建了一个简单的编辑器模板,例如:

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

C.类别是一种可观的

这很好,但是我希望另一个模板以略有不同的标记渲染该集合,因此我将编辑模板复制并重命名为例如“ categoryicons.cshtm”,并调用如下:

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

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

打开页面时,我现在会收到以下错误:

传递到字典中的模型项为'system.collections.generic.list'1 [system.web.mvc.selectListItem]',但是该词典需要一个类型'system.web.mvc.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模板,该模板将其作为参数为其每个项目使用的模板的名称。

其他提示

只是一个更新,我偶然发现了这个问题,试图自己解决同一问题。

我最终要做的是迭代通过该集合的每个实例,并单独调用Edtorfor,有点像这样:

<ul class="select-list-item cell-15 col-3 omega clearfix">
    @for (int i=0;i<Model.Categories.Count;i++) {
        @Html.EditorFor(c => c.Categories[i], "CategoryIcons")
    }
</ul>

仍然不干净,但是我比继承像您这样的新课程更喜欢它。

(对不起,如果我的c#语法有点关闭,我在vb.net中写了)

如果您使用的是Editorfor,我认为循环解决方案不起作用。似乎使用IEnumerable模板是正确命名表单输入的唯一方法;如果您只是反复致电Editor,那么您的表格 <INPUT>S将具有相同的ID,而不是索引ID。

我经历了这个问题和 解决方案 是要散发枚举的模板和 不是 循环浏览列表项目。

很抱歉将其作为答案而不是评论 - 没有评论权。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top