MVC编辑命名模板的问题
-
26-10-2019 - |
题
我有(无论如何对我来说)出现的东西是一个奇怪的问题...
我为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。
我经历了这个问题和 解决方案 是要散发枚举的模板和 不是 循环浏览列表项目。
很抱歉将其作为答案而不是评论 - 没有评论权。