【问题标题】:ASP.NET MVC 2 disable cache for browser back button in partial viewsASP.NET MVC 2 在部分视图中禁用浏览器后退按钮的缓存
【发布时间】:2011-02-19 22:20:33
【问题描述】:

我在我的主页上使用Html.RenderAction<CartController>(c => c.Show()); 来显示所有页面的购物车。问题是当我将商品添加到购物车然后点击浏览器后退按钮时。它显示旧的购物车(来自缓存),直到我点击刷新按钮或导航到另一个页面。

我已经尝试过this,它工作得很好,但是它会为整个页面和我网站中的所有页面全局禁用缓存(因为在母版页上使用了这个 Action 方法)。出于性能原因,我需要为其他几个部分视图(操作方法)启用缓存。

我不想使用带有 AJAX 的客户端脚本在页面加载时刷新购物车(和登录视图)——但这是我现在能想到的唯一解决方案。

有人知道吗?

【问题讨论】:

    标签: asp.net caching asp.net-mvc-2 outputcache donut-caching


    【解决方案1】:

    除非您使用 iframe 或 ajax,否则无法仅对页面的一部分禁用浏览器缓存。浏览器只是从它的缓存中拉回数据,你要么禁用页面缓存。

    【讨论】:

      【解决方案2】:

      ASP.NET MVC 中的甜甜圈孔缓存

      如果您想缓存除购物车之外的所有页面。 您可以实现一个包含购物车的视图控件。并从此视图控件中删除缓存策略。

      <%@ Control Language="C#" Inherits="ViewUserControl<IEnumerable<Joke>>" %>
      <%@ OutputCache Duration="100" VaryByParam="none" %>
      
      <ul>
      <% foreach(var joke in Model) { %>
          <li><%= Html.Encode(joke.Title) %></li>
      <% } %>
      </ul>
      

      Haacked 更详细地解释了它here

      希望对你有所帮助。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 2015-01-08
      • 2013-11-14
      • 2011-08-06
      • 2020-05-15
      • 2016-07-21
      • 2010-10-31
      相关资源
      最近更新 更多