MVC 3 - 嵌套布局 - 部分不在区域中渲染

时间:2011-10-25 16:59:01

标签: asp.net-mvc-3 razor

问题:

给定这种嵌套布局结构:

~/Views/Shared/_layoutBase.cshtml
~/Views/Shared/_layout.cshtml

其中_layoutBase.cshtml_layout.cshtml的布局。

布局文件中定义的任何部分都会在~/Views/...

下的页面中呈现其内容

但是,对于区域中的视图,从不渲染这些部分。

设定:

_layoutBase

<script type="text/javascript">
        @RenderSection("footerScripts", false)
    </script>
</body>
</html>

_layout.cshtml

@section footerScripts{
    @RenderSection("footerScripts", false)
}

“内容”视图:

@section footerScripts{
$(function () {
    SetFocusOnForm("CaptchaCode", "NextButton");
});
}

部分footerScripts的内容永远不会在某个区域的视图中呈现。它确实在~/Views文件夹下的视图中呈现。

_ViewStart.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
} 

问题:

你能看到什么问题吗?!

2 个答案:

答案 0 :(得分:26)

我无法重现这个问题。这是我的设置和我做的步骤。

  1. 使用Internet应用程序模板
  2. 创建新的ASP.NET MVC 3应用程序
  3. 添加~/Views/Shared/_LayoutBase.cshtml

    <!DOCTYPE html>
    <html>
    <body>
    @RenderBody()
    <script type="text/javascript">
        @RenderSection("footerScripts", false)
    </script>
    </body>
    </html>
    
  4. ~/Views/Shared/_Layout.cshtml的内容替换为:

    @{
        Layout = "~/Views/Shared/_LayoutBase.cshtml";
    }
    
    @section footerScripts{
        @RenderSection("footerScripts", false)
    }
    
    @RenderBody()
    
  5. 右键单击项目并添加管理区域

  6. 将TestController添加到此管理区域并添加相应的~/Areas/Admin/Views/Test/Index.cshtml视图:

    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Index</h2>
    
    @section footerScripts{
        alert('ok');
    }
    
  7. 运行该应用程序并导航至/admin/test/index
  8. 显示警告

答案 1 :(得分:7)

原因:

我今天早上起床,立即看到了问题:

我在部分视图中有@section块。在MVC 3中,这将无法工作!!

哎呀!

我非常感谢Darin的努力,这有效地证明了各部分在预期的区域内有效。但真正的原因是这个。

我忘了他们在Partial View中,因为我有一个mvc 3向导,它使用部分视图来执行步骤。它运行得非常好并且一致,如果javascript可用,则使用ajax,忘记你在做什么。

请给达林投票,但这才是真正的答案。