Prima dell'arrivo di ASP.NET, era usuale l'elaborazione degli input degli utenti, mediante 2 pagine. La prima pagina, era statica e conteneva un tag <form> che inviava (tramite l'attributo action) una serie di campi ad seconda pagina, dinamica, la quale si occupava di elaborare i valori inviati.
Una seconda tecnica era quella di avere il form in una pagina dinamica che inviava informazioni a se stessa. Nel form venivano usati dei campi nascosti (hidden) per passare alcune informazioni relative allo stato della pagina. Grazie a questo meccanismo si poteva capire se la pagina fosse stata richiesta per la prima volta o se avesse effettuato un post su se stessa, per poi agire di conseguenza. Questa tecnica è chiamata post back.
Il post back è implementato in ASP.NET in modo invisibile al programmatore attraverso il controllo server etichettato <form runat="server">.
Listato 1. Dichiarazione di un controllo form
<form runat="server">
.... vari controlli ...
</form>
Questo equivale pressappoco a
Listato 2. Esempio di post back prima di ASP.NET
<form method=post action="nostra_pagina.aspx" runat="server">
.... vari controlli ...
<input type="hidden" name="isPostBack" value="true">
</form>
Il form server side è indispensabile per gestire i controlli server (dall'area di testo alla GridView)
si può omettere solo se non si prevede una interazione con la pagina.
L'attributo method predefinito è post e non get come in HTML, ed i valori sono disponibili ogni volta nella collezione Request.Form come in ASP.
Con la stessa tecnica viene mantenuto lo stato di alcuni controlli grazie alla variabile ViewState. Il ViewState è una variabile stringa, il cui valore, come si può notare nell'esempio, è codificato e serve per ricostruire lo stato della pagina, in quanto le comunicazioni HTTP client-server sono prive di stato.
Se leggiamo il sorgente di una pagina generata da un web form, notiamo la presenza del ViewState:
Listato 3. Generazione del ViewState
...
<body>
<form name="ctl00" method="post" action="orizzontale_b.aspx" id="ctl00">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTc0MDEwNTM2MWRkrh4HGxooxoD8swfeDRec5C+Aedw=" />
</div>
...
La postback architecture ci da la possibilità di realizzare pagine HTML contenenti controlli con cui l'utente può interagire. I controlli scatenano eventi ed è compito dello sviluppatore realizzare gli opportuni gestori di eventi per gestire l'interazione.
Quando effettuiamo la richiesta di una web form, vengono sollevati gli eventi:
- Page_Init generato quando la pagina viene inizializzata
- Page_Load generato quando la pagina viene caricata
- Control Event generato se un comando (ad esempio un pulsante) ha inviato la pagina al server
- Page_Unload generato quando la pagina viene scaricata dalla memoria
La differenza tra il Page_Init ed il Page_Load è che nel Page_Init il ViewState non è stato ancora caricato, per cui i comandi mantengono i valori predefiniti anziché i valori impostati durante il postback.
Per gestire l'evento Page_Load, si ricorre di frequente alla proprietà IsPostBack della classe Page. Se IsPostBack è vera, ci troviamo in un contesto di postback, vale a dire che la pagina è stata caricata una prima volta ed è stata poi inviata al server in seguito al verificarsi di un evento sul client. Se IsPostBack è falsa, la pagina è stata caricata per la prima volta.
Se vuoi aggiornamenti su .NET inserisci la tua email nel box qui sotto: