剃刀部分定义

时间:2015-03-28 00:04:20

标签: c# razor

我正在看一些剃刀布局代码。我找到了以下代码段:

@section Foo
{
    @if (@IsSectionDefined("Foo"))
    {
        @RenderSection("Foo", required: false)
    }
}

不会@section Foo定义Foo,这意味着if(@IsSectionDefined("Foo"))条件总是如此?此外,如果该部分是在另一个视图页面中定义的,那么这不会导致重新定义吗?

基本上,我不明白为什么这个条件包含在@section条款中。

3 个答案:

答案 0 :(得分:2)

我已经弄清楚这个模式的用途:这用于有多层布局的情况。节定义的范围限定为页面的直接父布局。因此,要定义将在更高级别布局中呈现的节,必须使用此构造将其传递给层次结构。

答案 1 :(得分:0)

使用RenderSection("Foo");

在布局文件中定义章节

答案 2 :(得分:0)

所以这就是我想到的:

代码的剪切本身并没有伤害任何东西。

它说的是:

如果要定义@section Foo,则必须在具有当前布局页面的其他一些页面中定义它。如果您定义它,则必须通过在布局页面中添加@RenderSection("ExtraContent")来呈现它。

在布局页面中

@section ExtraContent{
    @if (@IsSectionDefined("ExtraContent")){
        @RenderSection("ExtraContent", required: false)
    }
  }
@RenderSection("ExtraContent")

在关于页面:

@section ExtraContent{
   <p>Some extra content</p>
}