我正在尝试熟悉ASP.net MVC5并移植现有网站.
我已经定义了一个默认的共享布局视图,其中包含标题,导航,页脚等内容的几个部分…
我的主页与使用此布局的其他页面之间的唯一区别是主页有一个滑块和一些其他独特的功能.除此之外,布局是相同的.
因此,我不认为它保证创建两个不同的视图并设置主页的布局以使用一个视图,并且当大多数模板相同时,所有其他页面使用另一个页面.
我创建了一个名为_HomeContentPartial的部分包含主页的唯一内容.
只有当我的家(我的家庭控制器上的索引操作)是当前页面时,Razor有条件地包含此部分的最佳方式是什么?
解决方法
只需添加一个ViewBag.IsHome = true;到家庭控制器,索引动作方法控制器.
然后将其添加到_layout.chtml视图:
@if ((bool?)ViewBag.IsHome){ Html.RenderPartial( "_HomeContentPartial .cshtml" ); }
另外一个选项:
由于您可以在布局中指定任意数量的渲染区域,只需将可选部分放在占位符中,并使用@RenderSection并将所需标志设置为false,这样它就不会介意它是否缺失.
例如在你的_layout.cshtml中
@RenderSection(“extraheader”,false)
然后在视图中有可选部件插入该位置:
@section extraHeader{ <ul> <li>Some new option 1</li> <li>Some new option 2</li> </ul> }
您使用哪种方法取决于您希望如何重用组件.您可以愉快地在@section中呈现部分视图,以允许在多个视图中重用:
例如
@section extraHeader{ @Html.Partial("somepartialview") }
甚至使用另一个控制器动作(更好的封装,所以我的偏好):
例如
@section extraHeader{ @Html.Action("someAction","someController",new {id = someValue}) }