gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:51:50 25 4
gpt4 key购买 nike

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com