The Dark Side of .NET Programming

Il blog di Michele Aponte
posts - 212, comments - 145, trackbacks - 16

ASP.NET Page.ParseControl

Dopo un lungo mese di vacanza in inghilterra si ricomincia pian piano con le attività, tra cui anche la nostra serie di post su asp.net cominciata un po’ di mesi fa. Oggi volevo illustrarvi il metodo ParseControl() di Page, in realtà della classe astratta TemplateControl da cui page eredita, molto utile nella costruzione dinamica di interfacce web.

Supponiamo di voler aggiungere dinamicamente una texbox ad un placeholder della nostra pagina aspx, la prima cosa che viene in mente di fare è instanziare la classe textbox e aggiungerla all’insieme dei controlli del placeholder:

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     Control c = new TextBox();
   4:     this.PlaceHolder1.Controls.Add(c);
   5: }

possiamo fare la stessa cosa con il metodo ParseControl a partire da una stringa:

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     string textbox = "<asp:TextBox runat=\"server\" />";
   4:     Control c = Page.ParseControl(textbox);
   5:     this.PlaceHolder1.Controls.Add(c);
   6: }

Chiaramente per questo esempio la prima soluzione è molto più comoda, proviamo con un esempio un po’ più complesso:

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     StringBuilder code = new StringBuilder();
   4:     code.Append("<div><table><tr>");
   5:     code.Append("<th>Nome: </th>");
   6:     code.Append("<td><asp:TextBox runat=\"server\" /></td>");
   7:     code.Append("</tr><tr>");
   8:     code.Append("<th>Cognome: </th>");
   9:     code.Append("<td><asp:TextBox runat=\"server\" /></td>");
  10:     code.Append("</tr><tr>");
  11:     code.Append("<th />");
  12:     code.Append("<td><asp:Button Text=\"Invia\" runat=\"server\" /></td>");
  13:     code.Append("</tr></table></div>");
  14:     Control c = Page.ParseControl(code.ToString());
  15:     this.PlaceHolder1.Controls.Add(c);
  16: }

image

Se la stringa sorgente poi viene da una fonte esterna… l’utilità balza subito agli occhi! Chiaramente il parsing della stringa richiede il suo tempo e per riferirci al controllo l’unica è usare una FindControl(): non è una feature da usare indiscriminatamente ma è sicuramente molto utile.

--Michele

Print | posted on martedì 31 agosto 2010 01:19 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET