PartialView不会在_Layout.cshtml RenderBody()部分中输出

时间:2012-03-19 10:59:17

标签: c# asp.net-mvc-3

我创建了VIEWS和PartialVIEWS,但到目前为止,我已经看到了VIEWS,被渲染/输出到RenderBody()部分,该部分在_Layout.cshtml中设置

因此,如果我有_Layout.cshtml ......

<div id="container">
    <div id="col1"> 
        <p>Advert1 aliquip</p> 
         </div> 
         <div id="col2outer1"> 
            <div id="col2mid1">                    
                 @RenderBody()
                 <br /><b /> <br />
        </div>
       <div id="col2side1"> 
           <p>Advert2 </p> 
       </div> 
</div>

将在@RenderBody()部分中调用所有视图。这意味着Advert1和Advert2将始终显示在每个被调用的VIEW上。但是,当我调用PartialView时,这不会发生。 Advert1和Advert2不会出现。如何在不在每个PartialView中手动创建上述内容的情况下解决这个问题。

谢天谢地 那仁

4 个答案:

答案 0 :(得分:1)

如果我理解正确: - 你的RenderBody视图是非局部的但是 - 您的Adv1,2是部分观点吗?

如果是这样 - 如果你在div容器中调用@ Html.RenderPartial(“adv1”),它应该可以工作。

答案 1 :(得分:1)

如果您依靠_ViewStart.cshtml_Layout.cshtml应用于您的部分,请不要。尝试在初始代码块中明确设置Layout

我在上一个项目中为一堆自定义编辑器模板使用了嵌套布局,尝试让_ViewStart.cshtml启动该文件夹就行不通,因为Partials没有执行_ViewStart 。只要我在部分中直接手动指定Layout就可以了。

就个人而言,我对此很满意 - 这只是一个小麻烦。

所以,举个例子:

(在~/Views/Shared/_PartialLayout.cshtml

<div class="partialContainer">
@RenderBody()
</div>

然后示例部分如下:

{
  Layout = "~/Views/Shared/_PartialLayout.cshtml";
}
<p>Hello World!</p>

(请注意,您必须明确设置布局,因为部分内容不处理_ViewStart

在运行时 - 此部分实际呈现:

<div class="partialContainer">
<p>Hello World!</p>
</div>

我相信你想要实现的目标。

请注意,部分视图布局的实际位置并不重要,您可以根据需要将其放在共享文件夹中,也可以将其放在特定控制器的视图文件夹中 - 只要您正确地解决它在部分视图分配Layout成员时,它会没事的。

另一个SO:Correct way to use _viewstart.cshtml and partial Razor views?的答案实际上引用了Razor中的早期错误,它利用了PartialViewResults不执行ViewStart的事实。

答案 2 :(得分:1)

如果我已正确理解您的问题,使用asp.net mvc“sections”可能是您的情况的解决方案。

define section

call section

答案 3 :(得分:0)

您在Controller类的View中有什么回报? 您是否返回View或PartialView(m)? 如果你回复View(m)并渲染为Partial,如果我记得正确则可能导致一些奇怪的东西..