【问题标题】:Conditionally displaying partial views based on active page根据活动页面有条件地显示部分视图
【发布时间】:2014-08-07 00:09:46
【问题描述】:

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

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

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

因此,我不认为有必要创建两个不同的视图并将主页的布局设置为使用一个视图,而在大多数模板相同的情况下,所有其他页面都使用另一个视图。

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

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

【问题讨论】:

    标签: asp.net-mvc razor partials


    【解决方案1】:

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

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

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

    另一种选择:

    由于您可以在布局中指定任意数量的渲染区域,只需为可选部分放入占位符并使用@RenderSection 并将required 标志设置为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})
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 2016-03-09
      • 2020-04-15
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多