2010-04-16 10 views
16

Ich habe ein Problem mit einer Seite im Internet Explorer. Ich habe einen Ajax-Aufruf, der ein Formular in einem anderen Browser aufruft, wenn ich auf den Link klicke, den es im Controller übergibt und korrekte Daten lädt. Aber in IE, wenn es einmal geladen ist, bringt es mir die gleichen alten Ergebnisse, ohne den Controller zu übergeben.Internet Explorer Caching asp.netmvc ajax Ergebnisse

+0

Mögliches Duplikat von [Unerwartetes Caching von AJAX führt zu IE8] (http://StackOverflow.com/questions/1013637/unexpected-caching-of-ajax-results-in-ie-8) –

Antwort

23

Versuchen:

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

Dieses Attribut, in der Controller-Klasse platziert, deaktiviert das Caching. Da ich meine Anwendung nicht benötigen Caching, legte ich es in meiner Base Klasse:

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

hier schöne Beschreibung über OutputCacheAttribute ist: Improving Performance with Output Caching

Sie es auch auf Aktion platzieren können.

+0

Dies sollte nicht das Problem sein, da das Zwischenspeichern nur in IE geschieht –

+2

@Malcolm Frexner: Caching-Strategie unterscheidet sich in Browsern. Es gibt einige Probleme mit IE. – LukLed

9

Sie könnten versuchen, die cache Option false Einstellung:

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

    } 
}); 

Diese Option den Browser zwingen wird, die Anforderung nicht cachen.


UPDATE:

Basierend auf den Kommentar, den Sie einen eindeutigen Zeitstempel auf die URL Caching-Probleme könnte hinzufügen zu vermeiden:

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

Nun, ich benutze Microsoft Ajax, nicht jQuery. ;) Diese Einstellung funktioniert für alle Ajax-basierten Anrufe? sogar für msAjax? –

+0

oops, sorry, ich habe diesen wichtigen Teil Ihrer Frage verpasst. –

+2

Ich stimme dem zu, weil dies die richtige Antwort ist, wenn Sie jQuery verwenden. In der Tat, wenn Sie jQuery und nicht die MS Ajax Handler in MVC verwenden, ignoriert IE alle diese Attribute, die Sie für Ihre Methoden festgelegt haben. – James

0

Ich fand das auch sehr nützlich auf einem ähnlichen (aber nicht identisch) Problem.

http://forums.asp.net/t/1681358.aspx/1?Disable+cache+in+Ajax+ActionLink+extension+method+in+asp+net+MVC

Grundsätzlich sicherstellen, dass Sie POST verwenden im Gegensatz in Ihren Anfragen zu erhalten. Dies scheint zu verhindern, dass der IE zwischengespeichert wird.

ZB:

@ Ajax.ActionLink ("Clear Kontakte", MVC.Home.ClearContacts(), neu Ajaxoptions {Httpmethod = "POST", UpdateTargetId = "targetDiv"})

3

können Sie verwenden HttpMethod = "POST" auf Ajaxoptions

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

wie diese exp;

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

Wenn Sie die Ajax-Helfer verwenden, können Sie den AllowCache Parameter false wie folgt festgelegt:

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

Und IE wird nicht die Ergebnisse des Aufrufs zwischenzuspeichern.

0

tatsächlich im IE Browser Caching nicht automatisch löschen. aber in Chrom-Skripten arbeiten akzeptiert.so müssen Sie versuchen, für Löschen von Daten in Browser-Ebene.