以下部分已被定义,但尚未渲染布局页面

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

好的,我有这个代码:

@{ 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> } 

您的布局页面实际上不是渲染部分footermeta

在你的_Layout.cshtml中,放置@RenderSection("meta")你想要的元节渲染。

您还可以执行@RenderSection("meta", false)来指示该部分是可选的。

错误消息意味着您的_Layout.cshtml不包含您在视图中的@section@RenderSection语句。

检查您的布局,让我们知道。

请参阅此页面了解更多信息。

我遇到了类似的问题,布局模板确实有@RenderSection(...)但在if-else statement 。 所以当页面执行不包含@RenderSection的语句时,它会抛出exception。 如果这是你的情况,那么你的解决scheme要复杂一点:

  • 确保你有@RenderSection以外的语句或
  • 在if-else语句中重复@RenderSection ,或者
  • 使用不同的部分视图,或
  • 重新devise布局。

这可能是你的主要问题!

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

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

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

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

如果没有定义setion,第一行不会做任何事情,If语句可以确保在没有定义节的时候呈现默认头。

通常,如果您不为主布局页面所需的部分编写代码,则会发生此错误

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