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

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

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

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

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

2 ответа

Решение

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

Кеширование пончиковых дыр в ASP.NET MVC

Если вы хотите кэшировать всю свою страницу, кроме корзины. Вы можете реализовать элемент управления view, содержащий корзину. и удалите политику кэширования из этого элемента управления представлением.

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

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

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

Другие вопросы по тегам