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: }
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