Подтвердить что ты не робот

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

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

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

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

EDIT:

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

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

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

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

4b9b3361

Ответ 1

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

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

    }
});

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

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

});

Ответ 2

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

$.ajaxSetup({
    cache: false
});

Ответ 3

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

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

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

Ответ 4

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

Я закончил с

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

Прекрасно работает, спасибо за ответы.