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
文件夹中,那么可能出现了什么问题?
答案 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)