MVC3 - AJAX Partial View кэшируется... и я не могу остановить его

Я использую MVC3 - у меня есть функция javascript, которая использует jQuery get() для получения PartialView от контроллера.

Проблема в том, что он кэшируется, и я продолжаю получать устаревший контент.

Я пробовал [OutputCache(Duration=0)] на действии, думая, что это предотвратит его кэширование, но не радости. Может ли это быть кеширующим клиентом?

РЕДАКТИРОВАТЬ:

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

$.get("/someurl?_="+$.now(),function(data) {  
     // process data
});

Это явно не так чисто, но потому что каждый запрос проходит _=12345678 (отметка времени) никогда не кэшируется.

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

4 ответа

Решение

GET-запросы могут автоматически кэшироваться браузером, чтобы вы могли использовать .ajax() функция, которая противоречит .get() Функция позволяет отключить кеширование:

$.ajax({
    url: '/foo',
    type: 'GET',
    cache: 'false',
    success: function(result) {

    }
});

Другая возможность заключается в использовании POST:

$.post('/foo', function(result) {

});

IE особенно плохо об этом. Вы можете отключить все AJAX-кэширование с помощью следующего:

$.ajaxSetup({
    cache: false
});

По умолчанию кажется, что все частичные представления MVC 3 автоматически кэшируются, но вы можете управлять этим из контроллеров для каждого частичного представления, которое возвращается с атрибутом (или аннотациями, как они вызываются в Java) перед действием:

[OutputCache(Duration = 0)]
public ActionResult PersonEdit(string id)
{
  // do query and fill editvm here
  return PartialView("PersonEdit",editvm);
}

Таким образом, продолжительность установлена ​​на ноль. Вероятно, есть много других атрибутов, которые можно установить для отключения кэширования, но пока мне кажется, что это работает для меня индивидуально.

Благодаря вам обоим, первый все еще кэшируется с type="GET", даже с указанным cache:'false'. Это с использованием Chrome и локального IIS7.

Я закончил с

$.ajax({
            url: '@Url.Action("GetMyPartialView","MyController")/' + parameterId,
            type: 'POST',
            cache: 'false',
            success: function (result) {
                $('#dynamicContentDiv').html(result);
            }
 });

Работает нормально, спасибо за отзывы.

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