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);
}
});
Работает нормально, спасибо за отзывы.