Condividi tramite


Identificazione di controlli Web Form

Aggiornamento: novembre 2007

È necessario che i controlli presenti in una pagina Web ASP.NET siano identificabili in modo univoco. Tale esigenza viene solitamente soddisfatta tramite l'assegnazione di un valore alla proprietà ID. Tale valore diviene il nome dell'istanza del controllo, ovvero il nome attraverso cui si fa riferimento al controllo nel codice. Se, ad esempio, si imposta la proprietà ID di un controllo TextBox su Text1, sarà possibile fare riferimento al controllo nel codice come a Text1.

Diversi controlli con associazione a dati, compresi i controlli DataList, Repeater, GridView, FormView e DetailsView, fungono da contenitori per gli altri controlli (figli). In fase di esecuzione tali controlli generano più istanze del controllo figlio. Se, ad esempio, si crea un modello di DataList contenente un controllo Label, quando la pagina viene eseguita, verranno generate tante istanze del controllo Label quanti sono i record nell'origine dati del controlloDataList.

Nota:

I controlli che utilizzano modelli, ad esempio i controlli DataList e Repeater, ospitano oggetti modello. Quando, ad esempio, viene eseguito il controllo DataList, verranno create più istanze della classe DataListItem. Tali oggetti modello contengono a loro volta singoli controlli, quali etichette, caselle di testo, pulsanti e così via.

Poiché è possibile creare più istanze di un controllo nella stessa pagina e poiché è possibile riutilizzare i nomi dei controlli in pagine diverse, il framework di pagina di ASP.NET fornisce meccanismi che assicurano che i controlli presenti nella pagina e nell'applicazione dispongano di identificatori univoci. Vengono inoltre forniti modi in cui individuare i singoli controlli e modificarli tramite codice.

Il contenitore di denominazione

I controlli che fungono da contenitori per altri controlli generano un contenitore di denominazione, o spazio dei nomi di ID, per i propri controlli figlio. Grazie a tale contenitore di denominazione, gli attributi di ID dei controlli figlio risultano univoci a livello di applicazione. I controlli che generano un contenitore di denominazione implementano a tal fine l'interfaccia INamingContainer. Quando i controlli figlio vengono creati in fase di esecuzione, il contenitore di denominazione viene combinato con la proprietà ID del controllo figlio per creare il valore della proprietà UniqueID di ciascun controllo figlio. La proprietà UniqueID diviene, pertanto, un identificatore completo di un controllo, con riferimento sia al contenitore di denominazione che al valore dell'ID del singolo controllo.

Nell'esempio precedente le istanze multiple del controllo Label vengono create all'interno del contenitore di denominazione, ovvero lo spazio dei nomi, del controllo DataList padre. La proprietà UniqueID di ciascun controllo Label rifletterà questo spazio dei nomi che avrà un formato simile a DataList1:_ctl:MyLabel, DataList1:_ct2:MyLabel e così via.

Nota:

Non scrivere codice che fa riferimento ai controlli utilizzando il valore della proprietà UniqueID generata. La proprietà UniqueID può essere utilizzata come un handle da passare, ad esempio, a un processo, ma si consiglia di non basarsi sul fatto che presenti una struttura specifica.

Oltre ai controlli contenitore, che forniscono un contenitore di denominazione per i relativi controlli figlio, anche la pagina fornisce un contenitore di denominazione per tutti i propri controlli figlio. In tal modo viene creato uno spazio dei nomi univoco a livello di applicazione per tutti i controlli presenti nella pagina.

Utilizzo della proprietà NamingContainer

I controlli figlio possono fare riferimento al relativo contenitore di denominazione tramite la proprietà NamingContainer. Tale proprietà restituisce un oggetto di tipo Control di cui può essere eseguito il cast nel controllo DataList, nell'oggetto DataListItem appropriato e così via.

Fare riferimento al contenitore di denominazione è necessario quando occorre accedere da un controllo figlio a una proprietà del controllo contenitore. Nel gestore di un evento DataBinding di un controllo figlio è, ad esempio, possibile accedere all'oggetto DataItem tramite il contenitore di denominazione.

Nota:

La proprietà NamingContainer non fa necessariamente riferimento allo stesso controllo della proprietà Parent. In un controllo Repeater è, ad esempio, possibile avere un modello di elemento contenente una tabella che a sua volta contiene un controllo Label. Il controllo padre dell'etichetta è una cella della tabella (ad esempio un oggetto HtmlTableCell), ma il relativo contenitore di denominazione è l'oggetto DataListItem in quanto è il DataListItem che definisce lo spazio dei nomi del controllo Label, non la tabella.

Riferimento ai controlli

Se una pagina contiene controlli generati in fase di esecuzione, come quelli presenti nel modello di un controllo DataList, Repeater o GridView, non sarà possibile farvi riferimento direttamente tramite il relativo ID, perché l'ID non sarà univoco. Sono tuttavia disponibili diversi modi per individuare i singoli controlli presenti nella pagina. Per informazioni dettagliate, vedere Accesso a controlli ASP.NET a livello di codice.

Vedere anche

Concetti

Risoluzione degli ID dei controlli Web Form