La caratteristica principale di ASP.NET è quella di disporre di un motore di parsing in grado di convertire codice o porzioni di codice HTML/XML in controlli dalle funzionalità più banali, come il LiteralControl che semplicemente scrive del codice HTML, oppure più avanzati, come il DataGrid che offre funzionalità di paginazione, sorting ecc.
Tutto questo processo di conversione viene effettuato alla prima richiesta di una pagin, ma può essere sfruttato anche dinamicamente per parserizzare stringhe di codice. Per far ciò basta utilizzare la funzione ParseControl della classe TemplateControl dalla quale derivano sia Page che Control. Essa restituisce un Control contenitore con tutte le istanze già create.
Un esempio chiarirà sicuramente ogni dubbio:
<%@ Page Language="c#" Debug="true" EnableViewState="false" %> <script runat="server"> private DropDownList list; void Page_Init(object s, EventArgs e) { // .... operazioni per avere il codice ASP.NET string codeToParse = "Lista <asp:DropDownList runat=\"server\" id=\"list\"/>"; // Parserizzo i controlli Control c = this.ParseControl(codeToParse); // Lo aggiungo alla form form.Controls.Add(c); // Recupero il riferimento alla DropDownList list = (DropDownList)c.FindControl("list"); } void Page_Load(object s, EventArgs e) { list.Items.Add("item 1"); } </script> <form runat="server" id="form"> </form>
Il codice è commentato passo per passo. Partiamo da una stringa codeToParse contenente il codice ASP.NET la quale può provenire da qualsiasi fonte. Personalmente sfrutto molto questa tecnica in seguito a trasformazione XSLT su fonti XML prese da database al fine di eseguire un'unica query per l'intera pagina. Una volta parserizzato cerchiamo il controllo tramite FindControl e manteniamo un riferimento ad esso tramite una variabile, conservando il normale approccio di accesso ai controlli.
E? necessario prestare molta attenzione a questo tipo di metodo poiché pur offrendo una tecnica molto utile non dispone di nessun tipo di caching. Il lavoro di parsing è infatti pesante, quindi usatelo con parsimonia, in quelle pagine alla quali è possibile applicare politiche di output caching.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.