如果我有一个页面:
<body>
@section SomeStuff {
<span>This is a section I just addered</span>
}
</body>
布局是否可能不呈现此部分,或者这与概念上的工作方式相反。似乎能够在页面上不呈现某些部分是有用的(除非我不正确地考虑这个部分)。
修改
包含错误消息可能会有所帮助,当我将一个部分放入主页面时,布局页面会失败,并显示:The following sections have been defined but have not been rendered for the layout page "/Views/Layouts/_Layout1.cshtml": "SomeStuff".
好像它正在强制执行我要渲染页面上的每个部分或什么。
换句话说,在Layout.cshtml中,我不调用@RenderSection,但在Index.html中我定义了一个名为SomeStuff
的部分。这合法吗?好像它迫使我渲染页面中的所有部分,但看起来部分应该是可选的,不是吗?
答案 0 :(得分:25)
您可以指定是否需要某个部分。
@RenderSection("SomeStuff", required: false)
如果你没有在视图中渲染它,那么它不应该出错,在这里注明
http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx
答案 1 :(得分:6)
您可以通过将required参数设置为false来将节设置为可选。如果您想在您的部分中包含一些可选的包装HTML,那么您还可以使用 IsSectionDefined 方法。
@if(IsSectionDefined("SideBar"))
{
<div class="sidebar">
@RenderSection("SideBar", required: false)
</div>
}
答案 2 :(得分:5)
对于某些不呈现特定部分的布局,您需要具有类似这样的布局是你的layout.cshtml
@RenderSection("Somestuff", required:false)
答案 3 :(得分:0)
你可以这样做:
@if (condition) {
@RenderSection("SomeStuff")
}
或者直接使用conditional statement
而不是@RenderSection
:
@if (yourCondition) {
<span>This is a section I just addered</span>
}
答案 4 :(得分:0)
当我尝试将代码动态注入内联脚本时,我遇到了类似的问题,我通过以下方法解决了这个问题:
@if (someCondition)
{
@Html.Raw(@"
Your stuff here
");
}