已定义以下部分但尚未为布局页面“〜/ Views / Shared / _Layout.cshtml”呈现:“脚本”

时间:2012-06-10 18:17:29

标签: asp.net asp.net-mvc

我是ASP MVC的新手,并使用Intro to ASP MVC 4 Beta教程http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

我遇到一个错误,我似乎无法找到答案,也没有太多的编程经验,所以我不知道在哪里开始修复这个教程。感谢您提供的任何帮助。

我正在从控制器部分访问您的模型的数据,当我尝试创建一个电影作为教程的一部分时,我收到此错误,我点击链接“创建新”,我得到了跟随错误

  

以下部分已定义,但尚未针对布局页面>“〜/ Views / Shared / _Layout.cshtml”:“Scripts”

进行渲染

我没有使用Visual Studio Express,而是选择下载Visual Studio 2012 RC(不确定这是否是我问题的根本原因。

我意识到你可能要求我包含代码来回答这个问题,但我不确定甚至包括哪些代码。请告知我需要包含哪些代码(如果有的话),我很乐意将其添加到我的问题中。

谢谢,

17 个答案:

答案 0 :(得分:121)

这意味着您已在主Layout.cshtml中定义了一个部分,但您未在视图中包含该部分的任何内容。

如果_Layout.cshtml有这样的内容:

@RenderSection("scripts")

然后,使用该布局的所有视图必须包含具有相同名称的@section(即使该部分的内容为空):

@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section scripts{
    // Add something here
}

作为替代方案, 您可以将required设置为false,然后您不会被要求在每个View中添加该部分,

@RenderSection("scripts", required: false)

或者您也可以将@RenderSection包裹在if块中,

@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}

答案 1 :(得分:23)

此外,您可以将以下行添加到_Layout.cshtml_Layout.Mobile.cshtml

@RenderSection("scripts", required: false)

答案 2 :(得分:21)

我有3个级别的案例a'la _ MainLayout.cshtml < --- _ Middle.cshtml < --- Page。 CSHTML 。即使这样做:

<强> _MainLayout.cshtml

<head>
   @RenderSection("head", false)
</head>

<强> _Middle.cshtml

@section head {
    @RenderSection("head")
}

并在 Page.cshtml 中定义

@section head {
   ***content***
}

我仍然会收到错误

  

以下部分已定义但尚未呈现   对于布局页面“〜/ Views / Shared / _Middle.cshtml”:“head”。

原来,错误是 Middle.cshtml 依赖于 /Views/_ViewStart.cshtml  解决它的父布局。通过明确地在 Middle.cshtml 中定义此问题,解决了该问题:

@{
Layout = "~/Views/_Shared/_MainLayout.cshtml";
}

无法决定这是设计还是MVC 4中的错误 - 无论如何,问题已经解决了:)

答案 3 :(得分:9)

如果建议的解决方案没有解决问题,我不确定为什么接受的答案被接受了。实际上可能存在与此主题相关的两个相关问题。

问题#1

母版页(例如_Layout.cshtml)已定义了一个部分,并且必需但是继承视图未实现它。例如,

布局模板

<body>
    @* Visible only to admin users *@
    <div id="option_box"> 
        @* this section is required due to the absence of the second parameter *@
        @RenderSection("OptionBox") 
    </div>
</body>

继承视图

无需显示任何代码,只需考虑视图中没有@section OptionBox {}实现。

问题#1的错误

Section not defined: "OptionBox ".

问题#2

母版页(例如_Layout.cshtml)已定义了一个部分,必需继承视图执行。但是,实施视图还有其他script个部分,其主页上(任何一个)的未定义

布局模板

same as above

继承视图

<div>
  <p>Looks like the Lakers can still make it to the playoffs</p>
</div>
@section OptionBox {
<a href"">Go and reserve playoff tickets now</a>
}
@section StatsBox {
<ul>
    <li>1. San Antonio</li>
    <li>8. L. A. Lakers</li>
</ul>
}

问题#2的错误

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"

OP的问题类似于问题#2,接受的答案是问题#1。

答案 4 :(得分:8)

我认为我们的解决方案与其他人完全不同,所以我将在此处记录。

我们设置了Main布局,中间布局,然后是最终的动作页面渲染。 Main.cshtml&lt; - Config.cshtml&lt; - Action.cshtml

只有当web.config有customErrors='On/RemoteOnly'时,我们才会收到自定义错误,并且没有例外,也没有调用Application_Error。我可以在Error.cshtml中的Layout = null行找到它。例外情况与问题一样,缺少脚本部分。

我们确实在Main.cshtml中定义了它(带有required:false),而Action.cshtml没有写入脚本部分的任何内容。

解决方法是将@section scripts { @RenderSection("scripts", false) }添加到Config.cshtml。

答案 5 :(得分:7)

_Layout.cshtml 没有:

时,基本上会发生这种情况
@RenderSection("scripts", required: false)

@RenderSection("scripts")  

没有

required: false

所以,只需添加     @RenderSection(“scripts”,必需:false) 在 _Layout.cshtml 中 它适用于那些使用 Kendoui 创建项目的开发人员。

答案 6 :(得分:6)

当您使用Visual Studio创建新模型时,某些版本的Visual Studio会自动为您生成视图文件,这似乎不匹配。我使用new VS 2013 Community Edition遇到了这个问题,并在http://www.w3schools.com/aspnet/mvc_app.asp处浏览了W3Schools教程,但上面的评论表明它不是教程指导或单个版本的VS的问题。

只需删除

,您就可以将错误消息消失

@Scripts.Render("~/bundles/jqueryval")

来自Visual Studio自动生成的创建/编辑布局。

但是,该解决方案并未解决根本原因,或者让您在完成本教程之前完成更多工作。在开发真实应用程序的某些时候(可能相当早),您将需要访问注释解决方案从您的应用程序中删除的jquery验证代码。

如果您使用VS为您创建新模型,它还会创建一组五个视图文件:创建,删除,详细信息,编辑和索引。 “创建”和“编辑”中的两个视图旨在让用户为作为模型基础的数据库记录中的字段添加/编辑数据。对于真实应用程序中的那些视图,您可能希望在将记录保存在db中之前使用jquery验证库进行一些数据验证。这就是为什么VS添加以下行

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

这两个观点的底部,而不是其他观点。自动生成的代码正在尝试使验证库可用于这些视图,而不是其他视图。

发生错误是因为VS要么没有在共享的_Layout.cshtml文件中添加相应的行,要么在上面的一个答案中添加它,但会将其注释掉。这一行是

@RenderSection("scripts", required: false)

如果您的某些视图具有脚本部分(如创建和编辑那样),则必须在布局中嵌入RenderSection命令。如果某些脚本具有该部分而某些脚本没有(如Delete,Details和Index不这样),则RenderSection命令必须具有required: false参数。

所以最好的解决方案,如果你想做的不仅仅是完成本教程,还要将语句添加到_Layout.cshtml,而不是从编辑和创建视图中删除代码。

P.S。这里有点混淆,所需要的是'bundle',而require语句看起来就像是试图将文件包含在项目中不存在的bundle文件夹中。但是,对于调试版本和教程,这是不相关的,因为捆绑的文件一次只包含一个。请参阅:http://www.asp.net/mvc/overview/performance/bundling-and-minification此处有争议的代码在页面下方的三分之二处被简要提及。

答案 7 :(得分:2)

在使用Visual Studio 2012完成ASP.NET MVC 4教程时,我在“从控制器部分访问模型的数据”中遇到了相同的错误。修复非常简单。

在共享文件夹的_Layout.cshtml文档中的Visual Studio 2012中创建新的ASP.NET MVC 4 Web应用程序时,“脚本”部分已被注释掉。

    @*@RenderSection("scripts", required: false)*@

只需取消注释该行,示例代码就可以正常工作。

    @RenderSection("scripts", required: false)

答案 8 :(得分:1)

我在为MVC初学者实施教程时遇到了同样的问题。我有各种建议要修改layout.cshtml文件中的@RenderSection,但我没有使用它。

我搜索了很多,然后我发现在(View / Edit.cshtml)和其他cshtml文件中生成的脚本标记没有呈现

**@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

} **

所以我删除了那些行并且应用程序开始顺利运行。

答案 9 :(得分:1)

我也评论了** @ section脚本 比它运行平稳。 :)

答案 10 :(得分:0)

我在网上搜索了错误并进入了此页面。 我正在使用Visual Studio 2015,这是我的第一个MVC项目。

如果在渲染部分之前错过了@符号,则会出现相同的错误。我想为未来的初学者分享这个。

 @RenderSection("headscripts", required: false)

答案 11 :(得分:0)

我有一种感觉,你是在_Layout文件中的@section中呈现你的部分,该文件指的是带有@section的局部视图,即你已经在@section中嵌套了@section。在_Layout文件中,删除渲染周围的@section。

答案 12 :(得分:0)

请确保您在视图中输入了使用脚本部分的正确拼写

正确的是

@section scripts{ //your script here}

如果您输入@section script{ //your script here},这是错误的。

答案 13 :(得分:0)

我使用以下方法解决了这个问题,

spec <- expensesByMonth %>%
    expand(month, .value = c("percent", "value")) %>%
    dplyr::mutate(.name = paste(.$month, .$.value, sep = "_"))
pivot_wider(expensesByMonth, spec = spec)

答案 14 :(得分:0)

对我来说,问题出在我的_Layout.cshtml中,条件中包含RenderSection

 @if (theme == "Red" || theme == "Green")
  {
       <div>
       @RenderSection("Footer", false)
       </div>
   }

在我的孩子看来,这是没有条件的

@section Footer{
        <div>
            @Html.AwButton("Reject", "Reject")
            @Html.AwSubmit("Ok", "Ok")
        </div>
    }

因此,无论主题如何,孩子都在添加页脚。但是在父级中,主题不是红色或绿色时,没有添加页脚和未处理的异常。

答案 15 :(得分:0)

我已经像下面那样更改了“ _Layout.cshtml”,它可以正常工作。 .Net Core 3.1 Blazor服务器模块身份问题。

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <title>@ViewBag.Title</title>
    <link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
    <link href="~/css/app.css" rel="stylesheet" />
    @RenderSection("Scripts", required: false)


</head>

<body>
    <div class="main">
        <div class="content px-4">


            @RenderBody()
        </div>
    </div>
</body>

</html>


@section Scripts {    
    
}

答案 16 :(得分:0)

我刚收到那个错误,我读到背后的原因是你必须渲染一个脚本部分。但是在 _Layout 中它已经是原样了。

@RenderSection("Scripts", required: false)

在我添加页面底部的部分之前它也有效。

就我而言,原因是拼写 Scripts 时出现了一个简单的错字。

@section Scripts{
<script src="~/js/myScript.js"></script>
}