已定义以下部分,但尚未为布局页面呈现

时间:2011-08-10 18:44:50

标签: asp.net-mvc-3 exception

这是一个ASP.NET MVC 3异常消息。它说的是什么?我该怎么办?

好的,我有这段代码:

@{
     Layout = "~/_Layout.cshtml";
     Page.Title = "Home";            
}

@section meta{
    <meta name="keywords" content="" />
    <meta name="description" content="" />
}

<h2>Html Content Here</h2>

@section footer {
    <script src="http://code.jquery.com/jquery-latest.min.js" charset="utf-8"></script>
    <script type="text/javascript">
        $(document).ready(function() {
    });    
    </script> 
}

5 个答案:

答案 0 :(得分:75)

您的布局页面实际上并未呈现footermeta

部分

在_Layout.cshtml中,将@RenderSection("meta")放入您希望呈现元素部分的位置。

您也可以@RenderSection("meta", false)表示该部分是可选的。

答案 1 :(得分:13)

错误消息表示您的_Layout.cshtml不包含您在视图中@RenderSection的{​​{1}}个语句。

检查您的布局并告诉我们。

有关详细信息,请参阅this page

答案 2 :(得分:10)

我遇到了类似的问题,其中布局模板确实具有@RenderSection(...)但在if-else statement内。因此,当页面执行不包含@RenderSection的语句时,它将抛出该异常。如果是这种情况,那么您的解决方案会更复杂一点:

  • 确保您在语句之外{/ 1}}或
  • 在if-else语句中重复@RenderSection,或
  • 使用不同的部分视图,或
  • 重新设计布局。

这可能是你的主要问题!

答案 3 :(得分:0)

当我收到此错误时,我试图在视图定义时有条件地在我的布局中包含一个部分。这是布局:

@if (IsSectionDefined("header"))
{
    RenderSection("header");
}
else
{
    Html.RenderPartial("_Header");
}

我认为@Jaider也在他的回答中提到了这一点,但你不能在if语句中放置RenderSection。实现我的目标的方法是反转if并在required方法上将RenderSection参数设置为false:

@RenderSection("header", false);
@if (!IsSectionDefined("header"))
{
    Html.RenderPartial("_Header");
}

如果没有定义setion,第一行不会做任何事情,If语句确保在没有定义任何部分时呈现默认标题。

答案 4 :(得分:-2)

如果您没有为主布局页面

所需的部分编写代码,通常会发生此错误

参考:https://ziaahmedshaikh.wordpress.com/2016/02/17/the-following-sections-have-been-defined-but-have-not-been-rendered-for-the-layout-page/