【发布时间】:2014-01-14 16:27:33
【问题描述】:
我在尝试使用同一个对象渲染两个单独的模板时遇到问题。
我有一些看起来像这样的东西:
@Html.DisplayFor(m => Model, "TemplateOne")
@Html.DisplayFor(m => Model, "TemplateTwo")
第一个模板得到渲染,第二个不会。
我使用 .NET Reflector 单步执行代码以查看发生了什么并发现:
if (html.ViewDataContainer.ViewData.TemplateInfo.VisitedObjects.Contains(item))
{
return string.Empty;
}
TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName, string templateName, DataBoundControlMode mode, object additionalViewData, ExecuteTemplateDelegate executeTemplate)
因此,它会检查模型/对象是否已用于渲染模板,如果在我的示例中具有,则返回“”,因此不会显示第二个模板。
我有一个解决方法是克隆第二个模板的模型,但我想知道是否还有其他我可以做的事情,比如我可以设置的配置选项?
史蒂夫
【问题讨论】:
-
一定是你做错了什么,因为我无法重现这个问题。从您的视图和显示模板中发布更多代码,也许会有所帮助。
-
我也无法重现这个(尝试使用 MVC 3、4 和 5)。但是,我注意到的一个问题是,有时在使用 VS2013 和 MVC 5 构建之后,显然会缺少一个模板。实际上,我必须修改调用模板的视图,保存并重建它才能正常工作。似乎是断断续续的,很可能是一个错误。
-
我会看看我是否可以在一个新项目中得到同样的东西,如果我要将同一模型上的另一个属性传递给它工作的模板之一。我会及时通知你
-
好的,我可以在一个干净的解决方案中重现这个。这是一个带有新 Web 项目的 zip 和一个示例:dl.dropboxusercontent.com/u/18857420/WebApplication1.zip 浏览到 /Help/ 我已经修改了表格以显示两个额外的列(模板一和二)。 (ApiGroup.cshtml) 对于模板一,它只是将用于渲染其视图的相同模型发送到模板,对于模板二,它使用有效的控制器描述符属性。如果您启动它,您将看到模板的一列将是空的,因为该模型已经用于渲染 ApiGroup.cshtml。希望有意义
-
我现在的解决方法是:为每个模板创建一个包装模型,但这太疯狂了……这里一定有什么问题吗?
标签: c# asp.net-mvc razor model