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

awr*_*ley 10 razor asp.net-mvc-3

问题:

给定这个嵌套的布局结构:

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

_layoutBase.cshtml布局在哪里_layout.cshtml.

布局文件中定义的任何部分都会在其下的页面中呈现其内容 ~/Views/...

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

建立:

_layoutBase:

<script type="text/javascript">
        @RenderSection("footerScripts", false)
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

_layout.cshtml:

@section footerScripts{
    @RenderSection("footerScripts", false)
}
Run Code Online (Sandbox Code Playgroud)

"内容"观点:

@section footerScripts{
$(function () {
    SetFocusOnForm("CaptchaCode", "NextButton");
});
}
Run Code Online (Sandbox Code Playgroud)

段的内容footerScripts永远不会在区域的视图中呈现.它确实在~/Views文件夹下的视图中呈现.

面积_ViewStart.cshtml:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
} 
Run Code Online (Sandbox Code Playgroud)

题:

你能看到什么问题吗?!

Dar*_*rov 26

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

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

    <!DOCTYPE html>
    <html>
    <body>
    @RenderBody()
    <script type="text/javascript">
        @RenderSection("footerScripts", false)
    </script>
    </body>
    </html>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 用以下内容替换内容~/Views/Shared/_Layout.cshtml:

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

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

    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Index</h2>
    
    @section footerScripts{
        alert('ok');
    }
    
    Run Code Online (Sandbox Code Playgroud)
  6. 运行应用程序并导航到 /admin/test/index
  7. 显示警报


awr*_*ley 7

之所以:

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

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

哎呀!

我非常感谢Darin的努力,这有效地提供了证据表明部分在区域中按预期工作.但真正的原因是这个.

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

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

  • 如果这解决了您的问题,您应该接受自己的答案. (2认同)