ASP.NET MVC 2 отключить кеш для кнопки возврата браузера в частичных представлениях

Я использую Html.RenderAction<CartController>(c => c.Show()); на своей главной странице, чтобы отображать корзину для всех страниц. Проблема в том, что я добавляю товар в корзину, а затем нажимаю кнопку возврата в браузере. Он показывает старую корзину (из кеша), пока я не нажму кнопку обновления или не перейду на другую страницу.

Я пробовал это, и он отлично работает, но отключает Кэшировать глобально для всей страницы и для всех страниц моего сайта (поскольку этот метод Action используется на главной странице). Мне нужно включить кеш для нескольких других частичных представлений (методов действий) по соображениям производительности.

Я бы не хотел использовать клиентский скрипт с AJAX для обновления корзины (и вида входа в систему) при загрузке страницы, но это единственное решение, о котором я могу думать прямо сейчас.

Кто-нибудь знает лучше?


person Maksymilian Majer    schedule 15.05.2010    source источник


Ответы (2)


Если вы не используете iframe или ajax, невозможно отключить кеш браузера только для части страницы. Браузер просто извлекает данные из своего кеша, и вы либо отключаете кеш страниц, либо нет.

person Erik Funkenbusch    schedule 07.10.2011

Кэширование бублика в 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>

Хаакед более подробно объясняет это здесь.

Надеюсь, это поможет тебе.

person SDReyes    schedule 15.05.2010
comment
Что плохого в таком подходе? это рекомендовано самим Haacked haacked.com/archive/2009/05 /12/donut-hole-caching.aspx. !? - person SDReyes; 18.05.2010
comment
Проблема в том, что вы путаете кеш браузера с кешированием на стороне сервера. У запрашивающей стороны проблемы с кешем браузера. - person Erik Funkenbusch; 07.10.2011