#722 - Assengare l'ID ai controlli in maniera automatica

Quando si sviluppano pagine complesse può capitare di dover creare controlli in modo programmatico e dovergli associare un ID univoco. Per toglierci il pensiero di dover creare una nostra numerazione o calcolare un ID univoco, possiamo sfruttare la tabella del .NET Framework.
Nei controlli ASP.NET sono presenti tre proprietà simili, della quale è bene conoscere la differenza:
- ID: nome univoco del controllo rispetto al contenitore, opzionale;
- UniqueID: nome univoco del controllo rispetto all'intero grafo di controlli. Ogni livello di contenitore è concatenato dai due punti;
- ClientID: nome univoco uguale a UniqueID, ma separato da $ invece dei due punti. Viene usato come attributo ID sul tag html renderizzato

Per contenitore si intendono tutti quei controlli che implementano l'interfaccia INamingContainer, come Page, UserControl, DataGrid, DataList, Repeater, CheckBoxList.
UniqueID viene usato per quei controlli che necessitano di un PostBack lato server e la sua particolarità sta nel fatto che se l'ID non è specificato, verrà assegnato in automatico in funzione della posizione in cui si trova.
Con lo script di oggi vedremo il caso più tipico, quando vanno associati ai validatori i rispettivi ID delle TextBox da controllare.

<script runat="server" language="C#">

void Page_Load()
{
  for (int x = 0; x < 5; x++)
  {
    // Creo la TextBox

    TextBox tb = new TextBox();
    // Imposto l'ID a null

    tb.ID = null;
    // Chiamo senza usare il valore la proprietà UniqueID

    string uID = tb.UniqueID;
    // Aggiungo la TextBox ai controlli della form

    form1.Controls.Add(tb);

    // Creo il validatore

    RequiredFieldValidator val = new RequiredFieldValidator();
    // Imposto il messaggio di errore e l'ID della TextBox

    val.ErrorMessage = "Errore";
    val.ControlToValidate = tb.ID;
    // Aggiungo il validatore ai controlli della form

    form1.Controls.Add(val);

    form1.Controls.Add(new LiteralControl("<br/>"));
  }
}
</script>

<form runat="server" id="form1">
<p><asp:Button runat="server" Text="Salva" /></p>
</form>

E' importante notare l'assegnazione di null alla proprietà ID, poiché imposta un flag che sarà poi necessario per reperire l'ID autogenerato dalla proprietà UniqueID.
Si tratta di un workaround, funzionante con la versione 1.x del .NET Framework, di cui non è assicurato il funzionamento con le future versioni.


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC