Assengare l'ID ai controlli in maniera automatica

di Cristian Civera, in UserScript, ASP.NET, Custom Server Controls,

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("
"));
  }
}
</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.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi