Webcontrol dentro webcontrol dentro wecontrol... gli hooks!

In ASP.NET, spesso capita di dover accedere via codice alle proprietà di webcontrol non accessibili direttamente attraverso le proprietà della pagina in quanto innestati all'interno di altri webcontrol che ne determinano un naming container separato.

Un caso classico è quando si ha la necessità di accedere ai controlli interni a template controls come il DetailsView o il GridView.

La prima tecnica che viene in mente per accedere all'istanza del controllo è quello di usare dei FindControl sul controllo contenitore: vi sconsiglio questo metodo perchè tende a sporcare un po' il codice, oltre a renderlo untyped e quindi maggiormente prono a errori di run-time.

Il metodo che preferisco è quello che ho ribattezzato "tecnica degli hooks".

Nella parte di codice dichiarativa si imposta un handler per OnLoad (o per OnInit, a vostra scelta) del controllo a cui avete la necessità di accedere:

<asp:label runat="server" id="lbInnestata" OnLoad="lbInnestata_OnLoad" />

Nel code beside preparate una variabile privata destinata a contenere il riferimento al controllo effettivo:

private Label _lbInnestata;

A questo punto scriviamo il gancio (hook) che permette di associare il controllo effettivo alla nostra variabile privata:

protected void lbInnestata_OnLoad(object sender, EventArgs e)
{
this._lbInnestata= (Label)sender;
}

Il gioco è fatto, da questo momento possiamo accedere al nostro webcontrol innestato come se fosse un normale controllo a livello di pagina con:

this._lbInnestata
Published domenica 17 giugno 2007 22.04 by marcodelgatto
Filed under:

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Powered by Community Server (Commercial Edition), by Telligent Systems