有条件地显示基于活动页面的部分视图

时间:2014-06-17 05:02:39

标签: asp.net-mvc razor partials

我试图熟悉ASP.net MVC5并移植现有网站。

我已经定义了一个默认的共享布局视图,其中包含标题,导航,页脚等内容的几个部分...

我的主页和使用此布局的其他页面之间的唯一区别是主页有一个滑块和一些其他独特的功能。除此之外,布局是相同的。

因此,我不认为它保证创建两个不同的视图并设置主页的布局以使用一个视图,并且当大多数模板相同时,所有其他页面使用另一个视图。

我创建了一个名为_HomeContentPartial的部分名称,其中包含主页的唯一内容。

只有当我的家(我的家庭控制器上的索引操作)是当前页面时,Razor有条件地包含此部分的最佳方法是什么?

1 个答案:

答案 0 :(得分:16)

只需将ViewBag.IsHome = true;添加到home控制器,index操作方法控制器。

然后将其添加到_layout.chtml视图中:

   @if ((bool?)ViewBag.IsHome){
        Html.RenderPartial( "_HomeContentPartial .cshtml" );
   }

另一种选择:

由于您可以在布局中指定任意数量的渲染区域,只需为可选部分放置占位符,并使用@RenderSection并将required标记设置为false,以便它不介意它是否遗失。

e.g。在你的_layout.cshtml中

   @RenderSection(" extraheader",false)

然后在视图中有可插入该位置的可选部分:

@section extraHeader{
   <ul>
     <li>Some new option 1</li>
     <li>Some new option 2</li>
   </ul>
}

您使用哪种方法取决于您希望如何重用组件。您可以愉快地在@section内呈现部分视图,以允许在多个视图中重复使用:

e.g。

@section extraHeader{
   @Html.Partial("somepartialview")
}

甚至使用其他控制器操作(更好的封装,所以我的偏好):

e.g。

@section extraHeader{
   @Html.Action("someAction", "someController", new {id = someValue})
}