我的网站在布局中定义了导航栏。导航栏用于站点的多个视图中,并具有一些动态内容,这些内容是从数据库中的几个查询生成的。
我想知道渲染此菜单的最佳做法是什么(在局部视图中定义)。
据我所知,我可以通过两种方式做到这一点,每种方式都有一些优点和缺点:
使用Html.Action: +它完全独立于使用布局的视图 - 它添加了一个额外的请求来呈现页面的一部分 - 我正在添加一个Action方法,它返回一个未从Ajax调用的Partial视图。
使用Html.Partial: +渲染整个视图的简单请求 - 每个视图模型必须包含导航栏所需的信息
我非常感谢您对此的见解,因为我在我的网站上有几个这样的场景,我不确定哪一个是最好的。
谢谢!
答案 0 :(得分:14)
我会使用Html.Action,特别是如果此菜单包含从数据库中提取的一些动态数据。优点是,您可以完全独立于主要操作完全分离此提取。此外,可以通过使用[OutputCache]
属性对其进行装饰来缓存子操作的输出。通过这样做,如果数据不经常更改,您可以减少数据库的负载。
它添加了一个额外的请求来呈现页面的一部分
你一定误解了一些事情。客户没有其他要求。一切都在一个请求中提供。还有一个额外的控制器实例化和操作执行,但没有来自客户端的新HTTP请求。就好像在同一个请求中执行了2个控制器操作,并将它们的结果聚合到发送给客户端的单个HTML页面中。