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

12

问题:

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

~/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个回答

31

我无法复制出现的问题,这是我的设置和我所做的步骤。

  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>
  • ~/Views/Shared/_Layout.cshtml的内容替换为以下内容:

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

  • 在此Admin区域中添加一个TestController,并添加相应的~/Areas/Admin/Views/Test/Index.cshtml视图:

  • @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Index</h2>
    
    @section footerScripts{
        alert('ok');
    }
    
  • 运行应用程序并导航到/admin/test/index
  • 弹出警告信息

  • +1:我相信你。我明天会再仔细看一遍,现在太累了。我的代码肯定有错误,但是我就是找不出来。非常感谢。 - awrigley
    正是我所需要的。布局中嵌套渲染...谢谢! - nrod
    此外,如果您想添加一个名为“admin”的区域,只需将其添加到该区域的_ViewStart.cshtml中:@{ Layout = "~/Views/Shared/_AdminLayout.cshtml"; }从根目录的Shared文件夹中添加一个_AdminLayout.cshtml,内容如下:@{ Layout = "~/Views/Shared/_LayoutBase.cshtml"; }@section footerScripts{ @RenderSection("footerScripts", false) }@RenderBody() - jayson.centeno

    7

    原因:

    今天早上我起床后立刻发现了这个问题:

    我在Partial View中有@section块。 在MVC 3中,这是行不通的!

    糟糕!

    我非常感谢Darin的努力,他有效地证明了部分区域确实像预期的那样工作。 但真正的原因是这个。

    我忘记了它们在Partial View中,因为我有一个mvc 3向导,它使用步骤的局部视图。 它非常好地工作并且始终如一,如果JavaScript可用,则使用ajax,以至于你会忘记自己在做什么。

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


    2
    如果这解决了你的问题,你应该接受自己的答案。 - Martin Liversage

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接