如何在Layout中有条件地定义和呈现节

时间:2016-02-04 23:19:15

标签: .net model-view-controller razor

如何定义一个部分并立即在布局页面中呈现它?

// _ Layout.cshtml

<header>
@section sb233{
    <div class="somecontent">
    @ViewBag.somecontent
    </div>
}
@if (ViewBag.sb233) { RenderSection("sb233"); }
</header>
//Main container
<footer>@RenderSection("footer",false)</footer>    

// aView.cshtml

@{
  ViewBag.sb233=false; 
  ViewBag.somecontent="sb233";
 }
//Page content
@section footer { @RenderSection("sb233");}

// anotherView.cshtml

@{ViewBag.sb233=true;}
//Page content
@section footer { Something else}

给我一​​个&#34;未定义的部分&#34;错误。

在布局而不是视图中定义节的原因是它是一个常见的重复节,并允许视图控制是否应该以及在何处呈现节。

1 个答案:

答案 0 :(得分:0)

我认为你对自己来说有点太难了。 您希望基于viewbag属性显示指定的部分,您可以在没有RenderSection的情况下执行此操作。

// _ Layout.cshtml

<header>
@if (ViewBag.sb233)
{
    <div class="somecontent">
    @ViewBag.somecontent
    </div>
}
</header>
//Main container
<footer>@RenderSection("footer",false)</footer>    

// aView.cshtml

@{
    ViewBag.sb233=false; 
 }
//Page content
@section footer { }

// anotherView.cshtml

@{
   ViewBag.sb233=true;
   ViewBag.somecontent="sb233";
}
//Page content
@section footer { }



只是为了您的知识,您的anotherView.cshtml页面返回错误,因为它希望您的视图定义了一个sb233部分。但你没有那个。 将_Layout.cshtml行更改为:

时,错误将得到修复
@if (ViewBag.sb233) { RenderSection("sb233", false); }