【发布时间】:2013-11-13 14:23:15
【问题描述】:
我有一个“SomeObject”集合的显示
public List<SomeObject> SomeObjects
@Html.DisplayFor(m => m.SomeObjects)
这一切都很好。然后我有一个要求,这意味着我需要为同一个集合提供第二个不同的显示模板。
@Html.DisplayFor(m => m.SomeObjects, "NameOfTemplate")
执行此操作时收到以下消息。我以前使用过命名显示模板,但它可能仅适用于原始类型 - 字符串等?
'System.Collections.Generic.List1[SomeObject]',但是这本词典 需要'SomeObject'类型的模型项。
根据要求添加代码
“测试”显示模板
@model ViewModels.SomeObject
<p class="Namme">
<span>@Model.Name</span>
</p>
简单视图模型
public class SomeObject
{
public string Name { get; set; }
}
ParentViewModel 中的属性
public List<SomeObject> SomeObjects { get; set; }
cshtml文件..
@Html.DisplayFor(m => m.SomeObjects, "Test")
对我来说这是一个简单的问题,命名模板是否可以与集合一起使用?是不是 mvc 的另一个限制..
干杯, 约翰
【问题讨论】:
-
确保 Display 模板中的模型与您通过 DisplayFor razor 扩展传入的模型类型相同。似乎它不是您的显示模板中的通用列表。例如在您的模板中:'@model IList
' 与 '@model SomeObject' -
我尝试了您的建议,但没有成功。我的理解是 displayTemplates 的模型应该是单个而不是集合。这是我尝试过的,错误 @model IList
HttpCompileException 未被用户代码处理。 “外部组件抛出异常。” -
你能发布完整的代码,包括模板。基本上,无论您通过 Display For 传递什么,它都应该是 Display Template 的模型类型。尝试放置一个'@Html.DisplayFor(m => m .SomeObjects.First(), "TemplateName")'。好像您只是传入了不正确的模型类型。也包括调用 CSHTML 页面的模型代码。
标签: c# asp.net-mvc asp.net-mvc-4 razor-2 display-templates