ASP.NET MVC:使用Html.Partial还是Html.Action?

wil*_*lvv 10 asp.net-mvc partial-views razor

我有一个网站,在布局中定义了导航栏.导航栏用于站点的多个视图中,并具有一些动态内容,这些内容是从数据库中的几个查询生成的.

我想知道渲染这个菜单的最佳做法是什么(在局部视图中定义).

据我所知,我可以通过两种方式实现,每种方式都有一些优点和缺点:

使用Html.Action:+它完全独立于使用布局的视图 - 它添加了一个额外的请求来呈现页面的一部分 - 我添加了一个Action方法,它返回一个未从Ajax调用的Partial视图.

使用Html.Partial:+一个简单的请求来渲染整个视图 - 每个视图模型必须包含导航栏所需的信息

我非常感谢您对此的见解,因为我在我的网站上有几个这样的场景,我不确定哪一个是最好的.

谢谢!

Dar*_*rov 14

我会使用Html.Action,特别是如果此菜单包含从数据库中提取的一些动态数据.优点是您可以完全独立于主要操作完全分离此提取.此外,可以通过使用[OutputCache]属性对它们进行装饰来缓存子动作的输出.通过这样做,如果数据不经常更改,您可以减少数据库的负载.

它添加了一个额外的请求来呈现页面的一部分

你一定误解了一些事情.客户没有其他要求.一切都在一个请求中提供.还有一个额外的控制器实例化和操作执行,但没有来自客户端的新HTTP请求.就好像在同一个请求中执行了2个控制器操作,并将其结果聚合到发送给客户端的单个HTML页面中.

  • @NathanTaylor,这是真的.有一个开销超过渲染部分的开销.但是,与使用我们应该接受的儿童行为所获得的所有好处相比,这种开销是非常微不足道的.我的意思是你得到了关注点的分离,你得到了干净的代码,你得到了缓存,这将在表现中表现为部分,所以,是的,使用Html.Action. (4认同)