剃须刀截面定义
Razor Section Definition
我正在查看一些 Razor 布局代码。我找到了以下片段:
@section Foo
{
@if (@IsSectionDefined("Foo"))
{
@RenderSection("Foo", required: false)
}
}
@section Foo
不会定义 Foo
,这意味着 if (@IsSectionDefined("Foo")
) 条件将始终为真吗?另外,如果该部分在另一个视图页面中定义,这不会导致重新定义吗?
基本上,我不明白为什么这个条件包含在 @section
子句中。
您使用 RenderSection("Foo");
在布局文件中定义部分
这就是我的发现:
代码片段本身不会造成任何伤害。
上面写的是这样的:
如果要定义@section Foo
,则必须在具有当前布局页面的其他一些页面中定义它。如果你定义它,你必须通过在布局页面中添加 @RenderSection("ExtraContent")
来渲染它。
在布局页面中:
@section ExtraContent{
@if (@IsSectionDefined("ExtraContent")){
@RenderSection("ExtraContent", required: false)
}
}
@RenderSection("ExtraContent")
在“关于”页面中:
@section ExtraContent{
<p>Some extra content</p>
}
我明白了这个模式是做什么用的:这个用在有好几层布局的情况下。部分定义的范围是页面的直接父布局。因此,要定义将在更高级别布局中呈现的部分,必须使用此构造将其向上传递到层次结构。
我正在查看一些 Razor 布局代码。我找到了以下片段:
@section Foo
{
@if (@IsSectionDefined("Foo"))
{
@RenderSection("Foo", required: false)
}
}
@section Foo
不会定义 Foo
,这意味着 if (@IsSectionDefined("Foo")
) 条件将始终为真吗?另外,如果该部分在另一个视图页面中定义,这不会导致重新定义吗?
基本上,我不明白为什么这个条件包含在 @section
子句中。
您使用 RenderSection("Foo");
这就是我的发现:
代码片段本身不会造成任何伤害。
上面写的是这样的:
如果要定义@section Foo
,则必须在具有当前布局页面的其他一些页面中定义它。如果你定义它,你必须通过在布局页面中添加 @RenderSection("ExtraContent")
来渲染它。
在布局页面中:
@section ExtraContent{
@if (@IsSectionDefined("ExtraContent")){
@RenderSection("ExtraContent", required: false)
}
}
@RenderSection("ExtraContent")
在“关于”页面中:
@section ExtraContent{
<p>Some extra content</p>
}
我明白了这个模式是做什么用的:这个用在有好几层布局的情况下。部分定义的范围是页面的直接父布局。因此,要定义将在更高级别布局中呈现的部分,必须使用此构造将其向上传递到层次结构。