ASP.NET MVC 2在部分视图中禁用浏览器后退按钮的缓存

时间:2010-05-15 17:44:07

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

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

我已经尝试this并且它运行良好但是它会为我的站点中的所有页面全局禁用缓存(因为此Action方法用于母版页)。出于性能原因,我需要为其他几个部分视图(操作方法)启用缓存。

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

有谁知道更好吗?

2 个答案:

答案 0 :(得分:1)

ASP.NET MVC中的Donut Hole缓存

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

<%@ 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

希望它对你有所帮助。

答案 1 :(得分:1)

除非您使用iframe或ajax,否则无法仅为页面的一部分禁用浏览器缓存。浏览器只是从它的缓存中提取数据,而你是否禁用了页面缓存。