2010-04-16 15 views
16

Mam problem ze stroną w eksploratorze internetowym. Mam wywołanie ajax, które wywołuje formularz, w innej przeglądarce, po kliknięciu łącza przechodzi w kontroler i ładować poprawnie danych. ale w IE, gdy jest załadowany raz, to przynosi mi te same stare wyniki bez przechodzenia przez kontroler.Internet Explorer Buforowanie asp.netmvc ajax results

+0

Możliwy duplikat [nieoczekiwanego buforowania AJAX skutkuje wynikiem IE8] (http://stackoverflow.com/questions/1013637/unexpected-caching-of-ajax-results-in-ie8) –

Odpowiedz

23

Spróbuj:

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

Ten atrybut, umieszczony w klasie kontrolera, wyłącza buforowanie. Ponieważ nie ma potrzeby buforowania w mojej aplikacji, umieściłem go w mojej klasie BaseController:

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

Oto miły opis o OutputCacheAttribute: Improving Performance with Output Caching

Można umieścić go na działanie zbyt.

+0

To nie powinno być problemem, ponieważ buforowanie odbywa się tylko w IE –

+2

@Malcolm Frexner: Strategia buforowania różni się w przeglądarkach. Występują pewne problemy z IE. – LukLed

9

Można spróbować ustawić opcję cache do false:

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

    } 
}); 

Opcja ta zmusi przeglądarkę nie buforować żądania.


UPDATE:

podstawie komentarza można dodać unikalny znacznik czasu do adresu URL w celu uniknięcia problemów z buforowaniem:

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

Używam Microsoft Ajax, a nie jQuery. ;) To ustawienie działa dla wszystkich wywołań opartych na ajaxach? nawet dla msAjax? –

+0

oops, przepraszam, ominęłam tę ważną część twojego pytania. –

+2

Uaktualniam to, ponieważ jest to poprawna odpowiedź, jeśli używasz jQuery. W rzeczywistości, jeśli używasz jQuery, a nie procedur obsługi MS Ajax w MVC, IE całkowicie zignoruje wszystkie te atrybuty ustawione na twoich metodach. – James

0

Znalazłem również bardzo przydatne w podobnym (ale nie identycznym) problemie.

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

Zasadniczo upewnij się, że używasz POST zamiast GET w swoich żądań. Takie działanie wydaje się uniemożliwiać buforowanie pamięci podręcznej.

Np

@ Ajax.ActionLink ("Clear Kontakt", MVC.Home.ClearContacts(), nowe AjaxOptions {HttpMethod = "post", UpdateTargetId = "targetDiv"})

3

Można używaj HttpMethod = "POST" dla twojego AjaxOptions

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

Jeśli używasz Ajax Helper, można ustawić parametr AllowCache do false tak:

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

i IE nie będzie buforować wyniki rozmowy.

0

Rzeczywiście buforowanie przeglądarki IE nie jest automatycznie usuwane. , ale w skryptach Chrome działa accept.so musisz wypróbować na czyszczenie danych na poziomie przeglądarki.

Powiązane problemy