2010-04-29 24 views
9

Ho un'applicazione ASP.net (C#).Aggiornamento pagina pulsante Chrome Back - ASP.net

Quando un utente si trova su una pagina specifica, fa clic su un collegamento in questa pagina che lo porta a una pagina secondaria, visualizzando i dettagli del prodotto.

Se l'utente fa clic sul pulsante Indietro del browser, ho bisogno che la pagina padre sia aggiornata allo stato iniziale. vale a dire tutte le caselle di testo che avevano dati digitati devono essere vuoti, eventuali campi nascosti ripristinati ecc. Fondamentalmente ho bisogno di un CTRL-F5 quando un utente fa clic indietro.

La disattivazione del pulsante Indietro non è un'opzione.

Ho bisogno di questo solo su alcune pagine.

In IE e Firefox posso farlo funzionare senza problemi. Ma con chrome le caselle di testo contengono ancora i loro valori come fanno i campi nascosti. Se premo CTRL-F5 in Chrome, la pagina viene ripristinata correttamente al suo stato iniziale.

Questo è il codice che ho provato.

<%@ OutputCache Location="None" VaryByParam="None" %> 

e questo:

Response.Buffer = true; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetAllowResponseInBrowserHistory(false); 
    Response.Cache.SetNoStore(); 

e questo:

Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
    Response.Cache.SetValidUntilExpires(false); 
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetNoStore(); 

ho anche provato una varietà di questi in combinazione differente, ma senza successo.

grazie

+0

Con quale Chrome si è provato? Dev? Beta? Stabile? Finestre? – bzlm

risposta

0

La soluzione 'forza bruta' sarebbe quello di mettere alcuni javascript sulla pagina che alla pagina carico imposta i dati in qualche stato noto. Quindi trova tutti gli elementi e imposta i dati in base a una matrice di dati o oggetto json. Sulla richiesta iniziale, poiché tutto è comunque predefinito, l'impostazione non fa la differenza. Su una richiesta di pulsante indietro, poiché il javascript deve ancora essere eseguito, reimposta tutti i valori, indipendentemente dal browser.

Non credo che si possa forzare il funzionamento di un browser nel modo in cui si descrive, in quanto spetta a ciascun browser come si desidera implementare un pulsante di back - chrome lo fa in modo diverso.

6

Quando si preme il pulsante Indietro del browser, i campi INPUT non vengono ripristinati automaticamente dal browser. Invece, il browser conserva l'input dell'utente, rendendo più facile per gli utenti tornare indietro e apportare modifiche all'input.

Non è possibile risolvere questo lato server, perché il browser ignora la cache per questo. Invece, è possibile utilizzare l'attributo HTML autocomplete="off" nei campi di input per impedire che vengano mantenuti dal browser.

È anche possibile reimpostare manualmente il modulo utilizzando JavaScript:

document.getElementById("form1").reset(); 
+1

grazie. Questo non spiega perché Ie e Firefox sembrano essere rinfrescanti ma non Chrome. – SetiSeeker

+0

È una scelta di design da parte della gente di Google, immagino. Sono comunque contento che supportino l'attributo 'autocomplete' come soluzione alternativa. – Prutswonder

+0

Questa è una brutta "funzione" di Chrome per gli sviluppatori. Mi ci sono voluti anni per capire cosa stava succedendo al mio modulo dinamico (gli utenti possono aggiungere nuove righe che vengono salvate in un db su invio). In "retro", Chrome non riempie gli ID db delle righe aggiunte in precedenza (anche se la mia app lo stava pubblicando nell'HTML), quindi la mia app pensava che fossero tutti nuovi e li duplicava su un ulteriore invio. 'autocomplete =" off "' fa il trucco, comunque. – theyetiman

2

Queste due linee risolto il problema Chrome per me:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 

e io uso questa linea opzionale per dire al browser di non creare una voce di cronologia per ogni richiesta della stessa pagina:

Response.Cache.SetAllowResponseInBrowserHistory(true); 

Fonti:

Most popular answer in this post

Optional line

0

Si può anche mettere l'autocomplete = "off" sul tag form invece di ogni campo di input.

Problemi correlati