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

on3*_*3al 8 asp.net-mvc partials razor

我正在尝试熟悉ASP.net MVC5并正在移植现有网站.

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

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

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

我创建了一个_HomeContentPartial包含主页唯一内容的部分名称.

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

Gon*_*ing 17

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

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

   @if ((bool?)ViewBag.IsHome){
        Html.RenderPartial( "_HomeContentPartial .cshtml" );
   }
Run Code Online (Sandbox Code Playgroud)

另外一个选项:

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

例如在你的_layout.cshtml中

@RenderSection("extraheader",false)

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

@section extraHeader{
   <ul>
     <li>Some new option 1</li>
     <li>Some new option 2</li>
   </ul>
}
Run Code Online (Sandbox Code Playgroud)

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

例如

@section extraHeader{
   @Html.Partial("somepartialview")
}
Run Code Online (Sandbox Code Playgroud)

甚至使用另一个控制器动作(更好的封装,所以我的偏好):

例如

@section extraHeader{
   @Html.Action("someAction", "someController", new {id = someValue})
}
Run Code Online (Sandbox Code Playgroud)