2012-01-27 16 views
10

È comunque necessario disabilitare la cache quando si utilizza Ajax.ActionLink. Sto avendo problemi in IE per cui se rimuovo un oggetto, che utilizza un actionlink ajax, allora ricarica la vista parziale che l'oggetto è contenuto, e l'elemento riappare lì (anche se è stato rimosso) Su altro browser è funziona bene e come previstoASP.NET MVC - Prevenire la cache su Ajax.ActionLinks

@Ajax.ActionLink("x", "RemoveItem", new { id = item.QuoteLineID, enquiryId = item.EnquiryID }, new AjaxOptions() 
    { 
     InsertionMode = InsertionMode.Replace, 
     UpdateTargetId = "Summary" 
    }, new { @class = "delete-link" }) 
+0

http://stackoverflow.com/a/16299281/2057154 – yusuf

+0

Ciao, Sì, ho commentato che lo rende POST risolto il mio problema: http: //stackoverflow.com/questions/9031487/asp-net-mvc-prevent-cache-on-ajax-actionlinks?noredirect=1#comment11327530_9031542 – CallumVass

risposta

12
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
public ActionResult RemoveItem(int id, int enquiryId) 
{ 
    ... 
} 

o aggiungere un parametro a caso alla richiesta utilizzando l'argomento routeValues.

+0

Questo non funziona, l'ho provato, sembra essere correlato solo a IE – CallumVass

+0

@BiffBaffBoff, quindi prova ad aggiungere un numero casuale come parametro aggiuntivo per la stringa di query durante la generazione del collegamento. –

+1

Ho risolto, ho usato HttpMethod = "POST" in AjaxOptions. Sembra aver fatto il trucco – CallumVass

7

So che hai detto di averlo risolto utilizzando HttpPost, ma nel caso in cui questo non finisse per essere la soluzione preferita, questo funziona per me;

public ActionResult MyAction(string param1) 
{ 
    Response.CacheControl = "no-cache"; 
    ... 
} 
+0

Anche questo funziona per me. Grazie. – liquid

+0

Questo lavoro per me anche in IE11 – user1929393

3

ho risolto il mio problema utilizzando:

<script type="text/javascript"> 
    $(document).ready(function() { 
     // Disable browser cache Ajax.ActionLinks 
     $.ajaxSetup({ cache: false }); 
    }); 
</script>