【问题标题】:ASP.NET MVC: Use Html.Partial or Html.Action?ASP.NET MVC:使用 Html.Partial 还是 Html.Action?
【发布时间】:2012-01-19 02:17:48
【问题描述】:

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

我想知道呈现此菜单(在局部视图中定义)的最佳做法是什么。

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

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

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

非常感谢您对此的见解,因为我的网站上有几个类似的场景,但我不确定哪一个是最好的。

谢谢!

【问题讨论】:

    标签: asp.net-mvc razor partial-views


    【解决方案1】:

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

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

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

    【讨论】:

    • 虽然它只执行一个 HTTP 请求是正确的,但渲染一个动作的开销远远超过渲染一个部分的开销也是正确的。
    • @NathanTaylor,这是真的。存在超过渲染部分的开销。但是,与您从使用子操作中获得的所有好处相比,这种开销是微不足道的,我们应该简单地接受它。我的意思是你得到了关注点分离,你得到了干净的代码,你得到了缓存,这将在渲染部分的性能上表现出色,所以,是的,使用 Html.Action。
    • 我当然不反对,我只是强调事实。 Html.Action FTW。
    • @Darin 你有关于性能差异的一些数据或测量吗?
    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多