visual tutorial studio net mvc asp c# asp.net-mvc asp.net-mvc-3

tutorial - mvc asp.net c#



MVC3-La vista parcial de AJAX se está almacenando en caché... y no puedo detenerlo (4)

Estoy usando MVC3: tengo una función javascript que usa jQuery get () para obtener un PartialView desde un controlador.

El problema es que se está almacenando en caché y me siguen devolviendo el contenido obsoleto.

He intentado [OutputCache (Duración = 0)] en la acción, pensando que evitaría el almacenamiento en caché, pero no fue un placer. ¿Podría ser el cliente almacenarlo en caché también?

EDITAR:

Recientemente he estado usando otra forma de evitar el almacenamiento en caché que puede ser útil para algunos.

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

Obviamente no es tan limpio, pero como cada solicitud pasa un _=12345678 (marca de tiempo), nunca se almacena en caché.

Espero eso ayude.


IE es particularmente malo en eso. Puede deshabilitar todo el almacenamiento en caché de AJAX con lo siguiente:

$.ajaxSetup({ cache: false });


Las solicitudes GET podrían ser automáticamente almacenadas en caché por el navegador, por lo que podría usar la función .ajax() que, a diferencia de la función .get() , le permite deshabilitar el almacenamiento en caché:

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

Otra posibilidad es utilizar POST:

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


Parece que, de forma predeterminada, todas las vistas parciales de MVC 3 se almacenan en caché automáticamente, pero puede controlar esto desde los controladores para cada vista parcial que se devuelve con un atributo (o anotaciones como se llaman en Java) delante de la acción:

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

Así que la duración se establece en cero. Probablemente hay muchos otros atributos que pueden configurarse para desactivar el almacenamiento en caché, pero hasta ahora esto parece funcionar para mí de forma individual.


gracias a los dos, el primero aún se almacena en caché con tipo = "GET", incluso con caché: ''falso'' especificado. Eso es usar Chrome e IIS7 local.

Terminé con

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

Funciona bien, gracias por tus respuestas.