In questo articolo verranno illustrati i diversi modi per poter spostarsi tra due Web Forms ASP.NET, e per passare dei dati dall'una all'altra.
Esistono molti modi per passare da una Web Form all'altra. Si va dai metodi più tradizionali, come ad es. un semplice link, a quelli un po' più complessi quali il Server.Execute, ecc.
Di seguito illustrerò brevemente un po' tutti i modi per poter avviare l'esecuzione di una seconda Web Form, e passare eventualmente ad essa alcuni dati.
Hyperlink…
Il collegamento ipertestuale (o Hyperlink) è il modo più tradizionale, utilizzato da sempre per spostarsi da una pagina web ad un'altra, oppure da una pagina web ad un file musicale, ecc.
Ebbene nelle Web Form rimane valido questo metodo, sia con un semplice tag <a href=""></a> … oppure tramite l'utilizzo del controllo HyperLink di ASP.NET, che permette di impostare tramite la proprietà NavigateUrl, l'indirizzo web verso cui ridirigere l'utente.
Per poter passare dei dati alla web form di destinazione, quando si utilizza un hyperlink, è necessario ricorrere a dei parametri di tipo GET, che sono quelli che si "attaccano" all'url di destinazione, dopo un punto interrogativo.
Ecco un esempio:
http://localhost/webform2.aspx?var1=pippo
Da "webform2.aspx", andremo quindi a recuperare il valore tramite l'oggetto Request:
string myvar = Request("var1");
In questo caso, come anche in altri, si può utilizzare anche l'oggetto Session, per memorizzare delle variabili di sessione dalla web form di partenza, che saranno poi disponibili anche nella web form di destinazione.
WebForm1.aspx. Impostiamo il valore nella variabile session.
string myvar = "pippo";
Session["myvar"] = myvar;
WebForm2.aspx. Recuperiamo il valore dalla session.
if (Session["myvar"] != null)
{
string myvar = (string)Session["myvar"];
}
Prima di accedere direttamente alla variabile session, ricordiamoci sempre di testare che non sia un oggetto nullo, in quanto nel frattempo la sessione potrebbe essere scaduta, e quindi il nostro oggetto potrebbe essere stato rimosso dalla memoria.
Quando recuperiamo un oggetto dalla session, è necessario farne il casting al tipo originale. Questo perché tutti i valori che vengono inseriti in session, sono trattati come object.
Redirect…
Il redirect http consiste nello redirigere il client ad un URL specificato, determinando quindi l'esecuzione della Web Form corrente.
Così come per l'hyperlink, anche con il redorect possiamo utilizzare dei parametri GET, da recuperare nella pagina di destinazione tramite Request.
Response.Redirect("webform2.aspx?var1=pippo");
Server.Transfer…
E' simile al Response.Redirect. La differenza tra i 2 sta nel fatto che con Server.Transfer, il passaggio alla seconda web form avviene direttamente lato server, senza interpellare in alcun modo il client.
Ecco la sintassi:
Server.Transfer("webform2.aspx?myvar2=ciccio");
Possiamo comunque utilizzare i parametri GET. Ma in questo caso il metodo più performante per passare dei dati alla seconda web form è quello di memorizzare i dati dentro l'oggetto Context.
WebForm1.aspx
Context.Items.Add("myvar", "pippo");
Server.Transfer("webform2.aspx ");
// l'esecuzione di webform1.aspx termina. Il codice qua sotto non verrà eseguito
…
…
WebForm2.aspx
if (Context.Items["myvar"] != null)
{
Response.Write(Context.Items["myvar"].ToString() + "&br&");
}
Con Server.Transfer, l'esecuzione di "webform1.aspx" viene terminata, quindi il codice che viene dopo la chiamata del metodo non verrà eseguito.
Server.Execute…
Questo altro metodo è diverso rispetto a tutti gli altri. In questo caso infatti viene richiesta l'esecuzione della seconda webform, per poi riprendere l'esecuzione della prima, seguendo il flusso del programma.
Anche in questo caso il tutto avviene server-side, ed è quindi possibile utilizzare l'oggetto Context per condividere informazioni tra una web form e l'altra.
WebForm1.aspx
Response.Write("sto scrivendo da webform1 prima di chiamare Execute
");
// viene passato il controllo alla webform2 per l'esecuzione
Server.Execute("webform2.aspx");
// una volta terminata l'esecuzione di webform2, riprende l'esecuzione di webform1
Response.Write("sto scrivendo da webform1 dopo aver chiamato Execute
");
Con la chiamata del metodo Execute, l'output della webform2 viene aggiunto all'output del webform1.
Attenzione, per poter utilizzare il metodo Server.Execute, è necessario disabilitare il controllo sull'hashing del viewstate nel secondo web form.
Questo si ottiene impostando l'attributo "EnableViewStateMac" della direttiva @page di webform2 in questo modo:
<%@ Page language="c#" EnableViewStateMac="false" Codebehind="WebForm2.aspx.cs" AutoEventWireup="false" Inherits="webformstransfer.WebForm2" %>
Conclusioni…
Come potete vedere esistono parecchi modi per ottenere lo spostamento tra web forms. Scegliete quello più adatto alle vostre esigenze!
posted on giovedì 5 maggio 2005 0.53
by
Stefano Giannone