Accedere ai controlli nidificati di una pagina ASP.Net

Ogni controllo nella pagina è identificabile tramite il suo ID, ovvero si può far riferimento nella parte di code behind al controllo messo nel designer. Tuttavia questa affermazione non è sempre vera, in particolar modo se il controllo è annifato dentro ad altri controlli che fungono da contenitore (naming container) e che, per tale caratteristica, a run-time devono generare diverse istanze del controllo stesso e quindi "rinominare" il controllo.
In questo caso per rinominare si intende assegnare un ID univoco costituito dall’ID del Naming Container più l’ID del controllo stesso più un altro valore randomico per rendere l’ID nuovamente univoco.
Si pone però a questo punto il problema di come accedere allo specifico controllo, tanto a design-time che run-time.

La soluzione, in entrambe i casi, consiste nel metodo FindControl messo a dispozione dall’oggetto Control, con il quale data una stringa, si può recuperare l’istanza di uno specifico controllo all’interno del Naming Container del quale si è richiamato il metodo FindControl.

Es. Si supponga di avere un textbox con ID text1 dentro il controllo Page (Page anche è un naming container), si dovrà fare Page.FindControl("text1");

Succede però che in casi via siano diversi annidamenti, raggiungere un controllo diventi particolarmente difficile, perchè si dovrebbe chiamare una successione di NamingContainer.FindControl profonda tanto quanto il livello di annidamento del controllo che si vuole intercettare.
Un sistema alternativo è invece quello di specificare nella stringa da dare in pasto al metodo FindControl, il path completo del controllo nella medesima sintassi, separando ogni controllo con il simbolo $.

Es. TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;

Referenze: Web Forms Control Identification, Finding ASP.NET Child Controls….the Simple Way