剃须刀截面定义

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>
}

我明白了这个模式是做什么用的:这个用在有好几层布局的情况下。部分定义的范围是页面的直接父布局。因此,要定义将在更高级别布局中呈现的部分,必须使用此构造将其向上传递到层次结构。