History delle pagine web

di Cristian Civera, in .NET,

La domanda più frequente che si trova nei forum è: come impedire che l'utente prema "indietro" sul browser?
Non c'è un metodo unico, dovrete aspettare Avalon :-D

Scherzi a parte, esiste un metodo document.location.replace compatibile con praticamente tutte le versioni dei browser per aprire una nuova pagina al posto di quella attuale. Il risultato è che le pagine visitate non vengono registrate nella history e raggiungiamo così lo scopo.
Bastano poche righe per fare un custom control che crea link non registrabili nella history:

 public class SmartLink : HyperLink
{

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "document.location.replace(this.href);return false;");

base.AddAttributesToRender (writer);
}

 }

Resta il problema dei post dei moduli. Io non conosco nessuna funzione di JavaScript per evitare questo, ma mi è venuto in mente un trucchetto. Basta trasformare la richiesta POST in una GET passando tramite querystring i campi della form così da sfruttare il metodo replace. La classe System.Web.UI.Page dirigerisce la richiesta GET come un postback perché trova nella querystring i parametri __VIEWSTATE e __EVENTTARGET.
Ovviamente non è il massimo come soluzione. Un modulo troppo grosso potrebbe produrre una url troppo lungo per il browser o per il webserver e gli amministratori non saranno contenti di vedersi riempito il log :-D

Farò probabilmente uno script a riguardo...

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese