2009-07-27 30 views
15

Ci sono alcune domande simili pubblicate qui ma nessuna che risponda veramente alle mie esigenze.Pagina indietro Aggiorna pagina

Ho un elenco di elementi in una pagina, chiamiamolo masterlist.aspx. Se faccio clic su uno di questi elementi dell'elenco, viene visualizzata un'altra pagina, ad esempio details.aspx? Id = something.

La pagina visualizzata ha un controllo formview in modalità di modifica. Se l'utente desidera modificare i dati ha colpito un pulsante di collegamento modifica e, il modulo viene inviato in modalità di modifica, quindi modificare i dati e fare clic sul pulsante Salva, salvare i dati e rimettere il formview in modalità di visualizzazione.

Il problema è se l'utente utilizza il pulsante Indietro del browser per tornare alla pagina masterlist.aspx la pagina non viene aggiornata, viene estratta dalla cache del browser.

Ho giocato con le impostazioni della cache delle intestazioni HTTP ma non riesco a ottenere nulla che funzioni su tutti i principali browser. Su alcuni browser ottengo avvisi sulla pagina Web scaduti. Un'altra opzione è in qualche modo attivare un aggiornamento della pagina (o un aggiornamento parziale della pagina) quando la pagina viene caricata utilizzando il codice lato client, ma non sono stato in grado di capire come farlo.

C'è qualche altro approccio o qualcuno ha avuto successo con i due approcci di cui sopra, o c'è un modo per evitare completamente il problema.

+0

Questo è perché ASP.net utilizza un POST-modulo contenente l'intera pagina. Non so come risolvere questo problema, ma potrebbe aiutarti. –

risposta

31

Devo fare qualcosa di simile in un catalogo in cui la pagina di ricerca deve essere caricata dal DB su ogni carico perché quando si preme una pagina di prodotto chiama a una terza parte per ottenere informazioni aggiornate e quindi salva se dovrebbe essere aggiornato. Questo è così quando si preme il pulsante indietro come si sta dicendo che i dati vengono ricaricati. Quello che ho fatto è stato aggiunto alla pagina e sembra funzionare bene in tutti i browser.

public class ProductBrowser : Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetNoStore(); 
     Response.Cache.SetExpires(DateTime.MinValue); 

     base.OnInit(e); 
    } 
} 
+0

ha funzionato per il mio collega in cromo e cioè 6. – Merritt

+0

Grazie per questo - abbiamo provato questo prima un certo numero di volte. Funziona anche con Firefox e IE9. – penderi

0

Che ne dici di catturare l'evento keypress del pulsante Indietro, quindi invece di consentirgli di eseguire un browser.history.back(), è possibile effettuare una chiamata document.location (...).

In alternativa, è possibile acquisire l'evento back e attivare un postback, che potrebbe eseguire un Response.Redirect ("yourpage"). Questo costringerebbe il browser a rilasciare una dichiarazione GET per la pagina designata, e renderla aggiornata

0

Con Javascript una soluzione completa potrebbe non essere possibile, ma c'è una soluzione alternativa.

http://www.boutell.com/newfaq/creating/backbutton.html

utilizza una funzione di timeout che costringe più volte il browser per eseguire un'azione 'Forward'. Anche se qualcuno fa clic sul pulsante Indietro, tornerà alla pagina effettiva, annullando in tal modo l'operazione Indietro. Tuttavia, potrebbe causare uno sfarfallio.

+0

Prestare attenzione a questo metodo se si dispone di elementi del modulo nella pagina (come un modulo di accesso). Ha il potenziale per aggiornare la pagina mentre l'utente sta digitando nei campi. –

0

Ho giocato con le impostazioni della cache delle intestazioni HTTP ma non riesco a ottenere nulla che funzioni su tutti i principali browser. Su alcuni browser ottengo avvisi sulla pagina Web scaduti.

Come si arriva a quella pagina della masterlist? Se invii un HTTP GET e impedisci ai client e ai proxy di metterlo nella cache, non avrai problemi a tornare ad esso (e otterrai comunque una versione aggiornata).

Che ti lascia con il caching lato server (con invalidazione corretta quando uno di questi elementi cambia) o nessun caching.

Problemi correlati