C# RazorView,对多个模板使用相同的模型对象

C# RazorView,对多个模板使用相同的模型对象,c#,asp.net-mvc,razor,model,C#,Asp.net Mvc,Razor,Model,我在尝试使用同一对象渲染两个单独的模板时遇到问题 我有一些东西看起来像这样: @Html.DisplayFor(m => Model, "TemplateOne") @Html.DisplayFor(m => Model, "TemplateTwo") 第一个模板得到渲染,第二个模板不会 我使用.NET Reflector逐步查看代码以了解发生了什么,并发现: if (html.ViewDataContainer.ViewData.TemplateInfo.VisitedObjec

我在尝试使用同一对象渲染两个单独的模板时遇到问题

我有一些东西看起来像这样:

@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元数据、字符串htmlFieldName、字符串templateName、DataBoundControlMode模式、对象附加视图数据、ExecuteTemplateDelegate executeTemplate)

因此,它会检查模型/对象是否已用于呈现模板,然后如果它具有在我的示例中所具有的模板,它会返回“”,这样第二个模板就不会显示

我有一个解决办法,就是为第二个模板克隆模型,但我想知道是否还有其他事情可以做,比如我可以设置一个配置选项


史蒂夫

我现在的做法是创造

public class ModelWrapper{

      public object Model { get; set}
}
把这个设置传递给我真正需要的任何东西


不幸的限制

你肯定还有别的地方做错了,因为我无法重现这个问题。从您的视图和显示模板中发布更多代码,可能会有所帮助。我也无法复制这些代码(使用MVC 3、4和5进行了尝试)。然而,我注意到的一个问题是,有时在使用VS2013和MVC5构建之后,一个模板显然会丢失。实际上,我必须修改调用模板的视图,保存并重新生成,以使其正常工作。似乎是间歇性的,可能是一个bug。我会看看我是否能在一个新项目中得到同样的东西,如果我要将同一模型上的另一个属性传递给它工作的模板之一。我会告诉你的,我可以用干净的溶液重新制作。下面是一个包含新web项目的zip,以及中的一个示例:browse to/Help/i已修改该表以显示另外两列(模板一和模板二)。(ApiGroup.cshtml)对于模板一,它只将用于呈现其视图的相同模型发送到模板,对于模板二,它使用有效的控制器描述符属性。如果启动此命令,您将看到模板一列将为空,因为该模型已用于呈现ApiGroup.cshtml。希望它有意义我现在的解决方法是:为每个模板创建一个包装器模型,但那太疯狂了。。。这里一定有什么不对劲吧?