2015-05-14 17 views
9

Ho un'applicazione WebForm in cui la prima pagina è fondamentalmente una griglia contenente collegamenti a una seconda pagina che carica un visualizzatore PDF. La griglia si trova effettivamente in un controllo .ascx. Tutto funziona andando dalla prima pagina alla pagina di visualizzazione PDF. Tuttavia, quando premo il pulsante Indietro per tornare alla prima pagina. Ottengo il seguente errore (in Chrome, ma anche questo sta accadendo in altri browser):ERR_CACHE_MISS quando si ritorna a una pagina ASPX

Cache miss error

Se si fa clic sul pulsante Indietro poi il browser restituisce alla prima pagina e tutto è andato bene, ma ho bisogno di per risolvere questo errore.

Ho provato disabilitando la cache nella prima pagina basata sulla raccomandazione this StackOverflow answer, in questo modo:

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0. 
Response.AppendHeader("Expires", "0"); // Proxies. 

Inoltre ho provato questo:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
Response.Cache.SetExpires(DateTime.MinValue); 

Ho messo questo codice nel codice dietro della pagina .aspx e nel controllo .ascx (nei metodi OnInit), tutto inutilmente. Cosa mi manca qui?

+2

qual è il codice per accedere alla pagina con il visualizzatore di PDF? nello specifico stai usando un post-back per fare la navigazione? – JJS

risposta

2

Come @JJS implica che si sta utilizzando un OnClick (possibile tramite LinkButton o ImageButton) che causa un postback parziale/completo e il reindirizzamento si verifica nel code-behind. Se questo è corretto, c'è una ragione per cui non stai usando Hyperlink?

La gestione della cache non è la soluzione. Il browser sta affermando un post tra le pagine.

+0

Non avevo una buona ragione per non utilizzare i controlli HyperLink. Sono passato a quelli e ora funziona. Grazie per avermi aiutato a ricordare i diversi scopi di LinkButtons e HyperLinks! – FishBasketGordo

0

Oltre il metodo OnPreInit e impostare varie proprietà correlate alla memorizzazione nella cache sull'oggetto Response per impedire al browser di memorizzare nella cache la pagina.

protected override void OnPreInit(EventArgs e) 
{ 
    base.OnPreInit(e); 

    Response.Buffer = true; 
    Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d); 
    Response.Expires = -1500; 
    Response.CacheControl = "no-cache"; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
} 

si può fare qualcosa di simile per disabilitare page caching del browser, come la seguente:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetExpires(Now.AddSeconds(-1)); 
    Response.Cache.SetNoStore(); 
    Response.AppendHeader("Pragma", "no-cache"); 
Problemi correlati