ASP.Net  »  Articoli  »  ASP.NET 4 

ASP.NET 4 e ClientIDMode, migliora il rapporto tra Web Forms e JavaScript

di: Simone Moretti     21 Aprile 2010

Presentando le novità di ASP.NET 4.0, abbiamo accennato al fatto che è stata introdotta una nuova proprietà per i web server control che prende il nome di ClientIDMode. Questo articolo ha lo scopo di descrivere la proprietà ClientIDMode e di fornire degli esempi che servano a chiarirne l'utilizzo, con il fine di mostrare come identificare, finalmente senza ambiguità, i web server control negli script lato client.

In ASP.NET ogni web server control è rappresentato da un proprio markup, ad esempio, una casella di testo è rappresentata dal markup asp:TextBox. Affinché sia possibile rappresentare visivamente un qualsiasi controllo server in un browser è necessario trasformare il markup del controllo in un markup HTML comprensibile al browser. Ad esempio, l'elemento asp:TextBox viene trasformato nell'elemento input.

Ogni controllo server incluso in una web form deve possedere un identificatore che lo individua univocamente in modo tale che nel momento in qui questi viene rappresentato visivamente nella pagina non si vengono a creare conflitti con altri controlli presenti nella pagina stessa.

ASP.NET mette a disposizione un meccanismo per assicurarsi che questo avvenga ma fino alla versione 3.5 poteva risultare assai complicato predire il valore che avrebbe assunto l'identificativo di un controllo sul lato client e per riuscirvi si doveva ricorrere a stratagemmi vari. Con la versione 4 è stata introdotta una nuova proprietà che prende il nome di ClientIDMode che consente di indicare l'algoritmo di generazione dell'identificativo del controllo e conseguentemente di predire con estrema semplicità il valore che esso assumerà sul lato client.

Un po' di teoria

I web server control hanno tre proprietà che aiutano a identificarli quali:

ProprietàDescrizione
IDrappresenta l'identificativo del controllo che viene specificato dal programmatore dichiarativamente nel markup del controllo o da codice
ClientIDnon può essere specificata dal programmatore ma viene generata a runtime dal .NetFramework. Serve a identificare univocamente la rappresentazione html del controllo server. Viene usata negli script lato client. Dalla versione 4 di ASP.NET possiamo decidere, attraverso la proprietà ClientIDMode, l'algoritmo di generazione di questa proprietà e quindi predire il suo valore
UniqueIDanche questa non può essere specificata dal programmatore ma viene generata a runtime dal .NetFramework. Serve a identificare univocamente il controllo lato server. Viene usata raramente e solo lato server

Queste tre proprietà a volte assumono lo stesso valore, altre volte assumono valori diversi e si può fare confusione su quando e come usarle.

Quando il controllo non si trova dentro ad altri controlli, allora ASP.NET usa il valore della proprietà ID per valorizzare anche le proprietà UniqueID e ClientID. In questo contesto la proprietà ClientIDMode non avrà alcun effetto. Pensiamo, ad esempio, ad una casella di testo dentro una pagina Web:

<asp:TextBox ID="TextBox1" runat="server" Text="Testo" />

Quando la pagina sarà visualizzata nel browser le tre proprietà assumeranno i seguenti identici valori:

ProprietàVaolre
IDTextBox1
ClientIDTextBox1
UniqueIDTextBox1

La faccenda si fa più complicata quando il controllo si trova all'interno di una gerarchia di controlli. Vediamo le differenze.

Guide ASP.Net

Guida Windows Azure Code Snippets

Le migliori pratiche per far girare le applicazioni "in the cloud",...

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto