ASP.NET MVC 2禁用缓存以防止浏览器后退按钮在局部视图中的使用

5
我在我的主页面上使用Html.RenderAction<CartController>(c => c.Show());来显示所有页面的购物车。问题是,当我向购物车中添加商品并点击浏览器的返回按钮时,它会显示旧的购物车(来自缓存),直到我点击刷新按钮或导航到另一页。
我尝试了这个方法,它完美地解决了问题,但它会全局禁用缓存,对于我的整个网站的所有页面都生效(因为这个Action方法在主页面上使用)。出于性能方面的原因,我需要为几个其他部分视图(Action方法)启用缓存。
我不想使用客户端脚本和AJAX在页面加载时刷新购物车(和登录视图)- 但这是我现在能想到的唯一解决方案。
有人知道更好的方法吗?
2个回答

1

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在这里进一步解释了它。

希望能对你有所帮助。


这种方法有什么问题吗?它是由Haacked本人推荐的http://haacked.com/archive/2009/05/12/donut-hole-caching.aspx。!? - SDReyes
问题在于您将浏览器缓存与服务器端缓存混淆了。提问者遇到了浏览器缓存的问题。 - Erik Funkenbusch

1

除非您使用iframe或ajax,否则无法仅禁用页面的一部分的浏览器缓存。浏览器只是从其缓存中获取数据,而您要么禁用页面缓存,要么不禁用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接