在布局页面上渲染脚本时出现奇怪错误

时间:2015-09-05 12:30:30

标签: asp.net-mvc razor asp.net-mvc-5 bundling-and-minification

body的{​​{1}}元素中的最后一行是:

_Layout.cshtml

然而,当我运行我的应用程序时,我得到了例外:

  

以下部分已定义但尚未呈现   对于布局页面"〜/ Views / Shared / _Layout.cshtml":" Scripts"。

很奇怪,因为@RenderSection("Scripts", required: false) 不是必需的。然后,在我的登录页面中,我注释掉以下行:

Scripts

该应用运行良好。这是因为@section Scripts { @Scripts.Render("~/bundles/jqueryval") } 包是空的,所以视图引擎认为jqueryval部分没有在Scripts中呈现?我的_Layout.cshtml包含相关脚本,它存在于我的BundleConfig文件夹中,那么可能出现了什么问题?

4 个答案:

答案 0 :(得分:0)

这必须有效:

@RenderSection("Scripts", false)

您也可以将@RenderSection包装在if块中:

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

更新:请确保RenderSection与您视图中定义的部分具有相同的名称,例如在您的_Layout中,您应该拥有以下RenderSection:< / p>

@RenderSection("Scripts", required: false)

在其他观点中:

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

如果名称(在这种情况下为Scripts)不匹配,则会抛出该错误:

  

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

另外,请确保您的_ViewStart.cshtml指向正确的布局:

Layout = "~/Views/Shared/_Layout.cshtml";

答案 1 :(得分:0)

似乎布局页面是从_ViewStart呈现的,而不是直接在View上引用。请确保_Layout直接引用View,即:

@{Layout = "~/Views/Shared/_Layout.cshtml";}

答案 2 :(得分:0)

我发布这个作为答案,因为我没有足够的学分来发表你的问题的评论。遗憾。

但是您确定,您的登录页面是指相同的布局页面吗?

答案 3 :(得分:-1)

更改

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

到这个

@section Scripts
{
   <script type="text/javascript" src="@Url.Content("~/scripts/jqueryval.js")"></script> 
}

如果要在视图页面上呈现脚本,则必须设置

@RenderSection("Scripts", required: true)