113

我是 ASP MVC 新手,正在使用 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(不确定这是否是我的问题的根本原因。

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

谢谢,

4

19 回答 19

161

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

如果你的 _Layout.cshtml 有这样的东西:

@RenderSection("scripts")

那么所有使用该 Layout 的 View 都必须包含@section同名的 a(即使该部分的内容为空):

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

作为替代方案,您可以将 required 设置为 false,那么您将不需要在每个视图中添加该部分,

@RenderSection("scripts", required: false)

或者您也可以将其包装@RenderSection在一个if块中,

@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}
于 2012-06-10T18:28:18.437 回答
28

我有一个 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 中的错误 - 无论如何,问题已解决 :)

于 2012-09-12T13:14:21.953 回答
28

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

@RenderSection("scripts", required: false)
于 2012-09-27T14:27:52.980 回答
15

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

问题 #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。

于 2013-03-22T15:35:07.830 回答
10

我认为我们的解决方案与其他人有很大的不同,所以我将在这里记录下来。

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

只有当 web.configcustomErrors='On/RemoteOnly'我们得到一个自定义错误并且没有异常也没有Application_Error被调用时。我可以Layout = null在 Error.cshtml 中在线捕捉到这一点。例外情况与问题一样,缺少脚本部分。

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

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

于 2014-02-03T09:09:12.387 回答
9

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

确实,您只需删除

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

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

但是该解决方案并没有解决根本原因,也没有让您在完成本教程的过程中做更多的事情。在实际应用程序开发的某个时间点(可能相当早),您将希望访问注释掉解决方案从您的应用程序中删除的 jquery 验证代码。

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

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

到这两个视图的底部,而不是其他视图的底部。自动生成的代码试图使验证库可用于这些视图,但不能用于其他视图。

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

@RenderSection("scripts", required: false)

如果您的某些视图有一个脚本部分(如 Create 和 Edit 所做的),则必须在布局中嵌入一个 RenderSection 命令。如果有些脚本有节而有些没有(因为 Delete、Details 和 Index 没有),则 RenderSection 命令必须有required: false参数。

因此,最好的解决方案是,如果您想做的不仅仅是完成本教程的学习,就是将语句添加到 _Layout.cshtml,而不是从 Edit 和 Create 视图中删除代码。

PS 这有点令人困惑,这里需要的是一个“捆绑包”,而 require 语句看起来像是试图在项目中不存在的捆绑包文件夹中包含一个文件。但是,对于调试版本和教程,这无关紧要,因为捆绑的文件一次包含一个。请参阅:http ://www.asp.net/mvc/overview/performance/bundling-and-minification这里有争议的代码在页面下方大约三分之二处被简要提及。

于 2014-11-26T15:14:45.607 回答
8

它基本上发生在_Layout.cshtml没有时:

@RenderSection("scripts", required: false)

或与

@RenderSection("scripts")  

没有

required: false

因此,只需在 _Layout.cshtml 中添加 @RenderSection("scripts", required: false) , 它特别适用于那些使用Kendoui生成项目的开发人员。

于 2013-07-25T09:36:21.307 回答
3

在使用 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)
于 2013-04-01T16:00:14.817 回答
2

我已经像下面这样更改了“_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 {    
    
}
于 2020-09-22T12:44:58.033 回答
2

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

@RenderSection("Scripts", required: false)

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

就我而言,原因是一个简单的拼写错误Scripts

@section Scripts{
<script src="~/js/myScript.js"></script>
}
于 2021-04-15T14:58:08.983 回答
1

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

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

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

}**

所以我删除了这些行,应用程序开始顺利运行。

于 2014-09-11T07:14:38.403 回答
1

我有一种感觉,您正在从 _Layout 文件中的 @section 中渲染您的部分,该文件引用带有 @section 的局部视图,即您已将 @section 嵌套在 @section 中。在 _Layout 文件中,移除渲染部分周围的 @section。

于 2016-05-11T00:49:16.920 回答
1

我还评论了 **@section Scripts 比它运行顺利。:)

于 2020-02-14T05:17:38.070 回答
0

我通过使用以下解决了这个问题,

@await Html.PartialAsync("_ValidationScriptsPartial")
于 2019-03-20T14:42:02.170 回答
0

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

如果你错过了渲染部分之前的@符号,你会得到同样的错误。我想分享给未来的初学者。

 @RenderSection("headscripts", required: false)
于 2015-07-28T07:32:45.890 回答
0

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

正确的是

@section scripts{ //your script here}

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

于 2016-09-11T10:21:41.763 回答
0

对我来说,我说的是脚本而不是脚本, 我不知道为什么它在调试时没有显示为错误。

@section Script {}

于 2021-11-05T12:53:07.263 回答
0

检查术语“”的拼写和大写/小写

当我们写 @RenderSection("name", required: false) 确保剃刀视图包含一个部分 @section name{} 所以检查术语“”的拼写和大写/小写在这种情况下正确的是“脚本”

于 2015-09-10T16:33:02.020 回答
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>
    }

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

于 2019-11-11T09:53:35.347 回答