2010-04-16 15 views
16

Tengo un problema con una página en Internet Explorer. Tengo una llamada ajax que llama a un formulario, en otro navegador, cuando hago clic en el enlace que pasa en el controlador y carga correctamente los datos. pero en IE, cuando se carga una vez, siempre me trae los mismos resultados anteriores sin pasar el controlador.Internet Explorer Caching asp.netmvc ajax results

+0

Posible duplicado de [Caché inesperado de AJAX resulta en IE8] (http://stackoverflow.com/questions/1013637/unexpected-caching-of-ajax-results-in-ie8) –

Respuesta

23

Probar:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 

Este atributo, colocado en clase de controlador, deshabilita el almacenamiento en caché. Dado que no necesito el almacenamiento en caché en mi solicitud, lo coloqué en mi clase BaseController:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
public abstract class BaseController : Controller 
{ 

Aquí es agradable descripcion de OutputCacheAttribute: Improving Performance with Output Caching

Se puede colocar en la acción también.

+0

Esto no debería ser el problema porque el almacenamiento en caché solo ocurre en IE –

+2

@Malcolm Frexner: la estrategia de almacenamiento en caché difiere en los navegadores. Hay algunos problemas con IE. – LukLed

9

Usted podría intentar establecer la opción cache a false:

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

    } 
}); 

Esta opción hará que el navegador no hagan caché de la solicitud.


ACTUALIZACIÓN:

Basado en el comentario que podría añadir una marca de tiempo único en la url para evitar problemas de almacenamiento en caché:

var d = new Date(); 
var myURL = 'http://myserver/controller/action?d=' + 
    d.getDate() + 
    d.getHours() + 
    d.getMinutes() + 
    d.getMilliseconds(); 
+0

Bueno, estoy usando Microsoft Ajax, no jQuery. ;) Esta configuración funciona para todas las llamadas basadas en Ajax? incluso para msAjax? –

+0

uy, lo siento, me he perdido esta parte importante de su pregunta. –

+2

Estoy votando esto porque esta es la respuesta correcta si estás usando jQuery. De hecho, si está utilizando jQuery y no los manejadores MS Ajax en MVC, IE ignorará por completo todos los atributos que establezca en sus métodos. – James

3

Puede HttpMethod = "POST" utilizar en sus AjaxOptions

var ajaxOpts = new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"}; 

como esto exp;

@Ajax.ActionLink("Text","ActionName", new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"}) 
0

Si está utilizando el ayudante del Ajax, puede establecer el parámetro AllowCache-false así:

@Ajax.ActionLink("AjaxCall", "AjaxMethod", "DeconflictedFiles", 
       new { }, 
       new AjaxOptions 
       { 
        AllowCache = false, 
       }) 

Y IE no se caché de los resultados de la llamada.

0

en realidad en el almacenamiento en caché del navegador IE no se borra automáticamente. pero en las secuencias de comandos de Chrome funcionan. Por lo tanto, debe intentar borrar los datos en el nivel del navegador.

Cuestiones relacionadas