Passare dati fra WebForm

Nota

Sul forum di asp.net ho trovato un riferimento ad un post si Haissam. Mi è sembrato molto ben fatto e visto che questo problema ritorna con un'increadibile frequenza nei forum ho deciso di postare qui una traduzione dell'articolo sperando che possa aiutare i programmatori italiani:

 

In questo post, vi mostrerò diversi modi di passare informazioni fra webform. Si possono adottare diverse tecniche, dipende tutto da cosa vi serve!

Sappiamo tutti che l'Http non gestisce lo stato, quindi le informazioni dovranno essere salvate da qualche parte per poterle poi recuperare.

  1. Query String
  2. Cookies
  3. Variabili di Sessione
  4. Cross Page Postback
  5. Form Submit
  6. Server.Trasnfer o Server.Execute


Parleremo in dettaglio di ognuna specificando quali tipi possono lavorare.

1) QueryString:

Usando le variabili in query string puoi passare varibili fra webform. Supponiamo che tu debba passare il contenuto di TextBox1.Text da WebForm1 a WebForm2 alla pressione di un pulsante:

   1:  protected void Button1_Click(object sender, EventArgs e)
   2:  {
   3:      Response.Redirect("WebForm2.aspx?id=" + TextBox1.Text);
   4:  }

Per leggere il valore di "id" da WebForm2:

   1:  string queryStringID = Request.QueryString["id"];

2) Cookies:

Come probabilmente già sai, i cookies sono piccoli file di testo salvati sul client. I Cookie possono contenere massimo 4kb circa. Da quando i cookie si trovano sul client ad ogni richiesta del client al tuo sito, il browser cerca i cookie e li spedisce nell'oggetto Request.

Es: Per Salvare il valore di TextBox1.Text in un cookie:

   1:  protected void Button1_Click(object sender, EventArgs e)
   2:  {
   3:      HttpCookie cookie = new HttpCookie("UserName");
   4:      cookie.Value = TextBox1.Text;
   5:      cookie.Expires = DateTime.Now.AddDays(1);
   6:      Response.Cookies.Add(cookie);
   7:      Response.Redirect("WebForm2.aspx");
   8:  }

Adesso nel Page_Load di WebForm2, possiamo leggere il valore:

   1:  if(Request.Cookies["UserName"] != null)
   2:  {
   3:      Response.Write(Request.Cookies["UserName"].Value);
   4:  }

3) Variabili di Sessione:

Per Default le variabili di sessione sono salvate nella memoria del webserver. Le Sessioni sono uniche per ogni utente.

Per salvare una variabile di sessione:

   1:  protected void Button1_Click(object sender, EventArgs e)
   2:  {
   3:      Session["UserName"] = TextBox1.Text;
   4:      Response.Redirect("WebForm2.aspx");
   5:  }

Per leggere il valore da WebForm2:

   1:  Response.Write(Session["UserName"]);

4) Cross Page Postback (ASP.NET 2.0):

Il cross page postback è stato introdotto con l'ASP.NET 2.0. Ho già scritto un post in merito.

Ex: Setta la proprietà PostBackUrl di Button1 indirizzandolo a WebForm2.aspx.

Inserisci questo codice in WebForm2 per leggere il valore di TextBox1:

   1:  TextBox txtFirstPage = (TextBox)(PreviousPage.FindControl("TextBox1"));
   2:  Response.Write(String.Format("You wrote {0} in Page1",txtFirstPage.Text));

5) Submit Form:

Possimao eseguire il submit di un form in WebForm1.aspx a webform2.aspx. In questo caso possiamo recuperare tutti gli elementi contenuti nel form di webform1 da webform2. Quello che faremo in questo esempio è di aggiungere un altro form (non server side) che conterrà due controlli html. Il primo sarà un submit ed il secondo sarà un campo hidden che conterrà il valore del controllo server TextBox1 per poter essere inviato a webform2.

   1:  <form id="Form1" method="post" runat="server">
   2:      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
   3:  </form>
   4:  <form name="SubmittedForm" action="WebForm2.aspx" method="post">
   5:      <input id="Submit1" type="submit" value="submit" onclick="CopyTextToHiddenField()" />
   6:      <input name="Hidden1" type="hidden" />
   7:  </form>

Ovviamente ti sarai accorto che abbiamo gestito l'evento onclick del controllo submit che chiamerà una funzione javascript per copiare il valore di TextBox1 nel campo hidden (Hidden1) per poter essere inviato a WebForm2. Avrai anche notato l'attributo action del secondo form in cui specifichiamo in quale pagina dobbiamo essere reindirizzati.

Aggiungiamo questo javascript nella <head> di WebForm1

   1:  <script language="javascript">
   2:      function CopyTextToHiddenField()
   3:      {
   4:          var textbox1Value = document.getElementById("<%=TextBox1.ClientID%>").value;
   5:          document.forms[1].document.getElementById("Hidden1").value = textbox1Value;
   6:      }
   7:  </script>

Adesso possiamo recuperare il valore di Hidden1 da WebForm2 con questo codice:

   1:  Response.Write(Request.Form["Hidden1"]);   

6) Server.Transfer e Server.Execute

Queste due funzioni accettano 2 parametri. Il primo è il nome della webform a cui si vuol fare il redirect, il secondo è un parametro booleiano che specifica se il form debba essere preservato.

   1:  protected void Button1_Click1(object sender, EventArgs e)
   2:  {
   3:      Server.Transfer("WebForm2.aspx", true);
   4:  }

Adesso nel page_load di  WebForm2 possiamo usare questo codice per leggere il valore di TextBox1

   1:  Response.Write(Request.Form["TextBox1"]);

il codice per Server.Execute è identico.


Spero che questo post possa essere d'aiuto e ringrazio Haissam per avermi autorizzato alla pubblicazione della traduzione.

Per eventuali domande/suggerimenti/altro contattatemi pure.

Link al post originale di Haissam 

Technorati Tag: ,,

posted @ sabato 24 maggio 2008 14:22

Print
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011