5

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

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

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

有没有人更了解?

4

2 回答 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 在这里更详细地解释了它。

希望它可以帮助你。

于 2010-05-15T19:05:28.720 回答
1

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

于 2011-10-07T14:37:47.110 回答