定义一个部分在视图中呈现的位置

时间:2013-06-26 18:05:09

标签: .net razor sections

我有兴趣根据页面级别而不是模板级别在不同位置渲染部分,这可能吗?例如:

模板:

<body>
@if (IsSectionDefined("oneColumn")) {
  @RenderSection("oneColumn", false)    
  <div class="row">             
     @RenderSection("oneColumn_1", true)
  </div>
}

@if (IsSectionDefined("twoColumn")) {
@RenderSection("twoColumn", false)  
  <div class="row">             
    @RenderSection("twoColumn_1", true)
    @RenderSection("twoColumn_2", true)
  </div>
}
</body>

页面级别:

@{
  Layout = "template.cshtml";
}

@section twoColumn{}    
@section oneColumn{}

@section twoColumn_1 { <div>THIS IS COLUMN 1 - ColSpan 1</div> }
@section twoColumn_2 { <div>THIS IS COLUMN 2 - ColSpan 2</div> }
@section oneColumn_1 { <div>THIS IS COLUMN 1</div> }

这总是在oneColumn部分上方呈现oneColumn部分。但是我想把两个柱子放在一个柱子之上。希望在不创建其他模板的情况下执行此操作。

1 个答案:

答案 0 :(得分:0)

除非引入其他级别的子模板/部分视图,否则无法指示将在“页面级别”中呈现部分的位置。

我假设您不希望总是在一列内容上显示两列内容。

如果您希望偶尔在一个列部分上方渲染两列,则在模板(布局视图)中添加另一部分,例如:

@if (IsSectionDefined("oneColumnAfterTwo")) {
@RenderSection("oneColumnAfterTwo", false)  
  <div class="row">             
    @RenderSection("oneColumn_1", true)
  </div>
}

并修改您的网页/浏览量,以便在需要时包含oneColumnAfterTwo而不是oneColumn