Identification d'un contrôle Web Forms
Mise à jour : novembre 2007
Chaque contrôle d'une page Web ASP.NET doit avoir un identificateur unique. En général, vous assignez une valeur à la propriété ID d'un contrôle afin de l'identifier de manière unique. Cette valeur devient le nom d'instance du contrôle, c'est-à-dire le nom que vous pouvez utiliser pour faire référence au contrôle dans le code. Par exemple, si vous attribuez à la propriété ID d'un contrôle TextBox la valeur Text1, vous pouvez faire référence au contrôle dans le code en tant que Text1.
Plusieurs contrôles liés aux données, et notamment les contrôles DataList, Repeater, GridView, FormView et DetailsView, servent de conteneurs à d'autres contrôles (enfants). Lors de leur exécution, ces contrôles génèrent plusieurs instances du contrôle enfant. Par exemple, si vous créez un modèle DataList contenant un contrôle Label, lorsque la page est exécutée, elle comporte autant d'instances de ce contrôle Label qu'il y a d'enregistrements dans la source de données du contrôle DataList.
Remarque : |
---|
Les contrôles qui utilisent ces modèles, tels que les contrôles DataList et Repeater, hébergent des objets modèle. Par exemple, le contrôle DataList crée plusieurs instances de la classe DataListItem lors de son exécution. Ces objets modèle contiennent à leur tour des contrôles individuels tels que des étiquettes, des zones de texte, des boutons, etc. |
Étant donné que les contrôles peuvent être instanciés plusieurs fois sur la même page et que vous pouvez réutiliser les noms de contrôles sur des pages distinctes, l'infrastructure de page ASP.NET fournit des mécanismes permettant de s'assurer que les contrôles de la page et de votre application ont des identificateurs uniques. Elle vous permet également de rechercher ces contrôles individuels afin de les manipuler dans votre propre code.
Le conteneur de dénomination (naming container)
Les contrôles pouvant faire office de conteneurs pour d'autres contrôles génèrent un conteneur de dénomination, ou espace de noms d'ID, pour leurs contrôles enfants. Grâce à ce conteneur de dénomination, les contrôles peuvent garantir que les attributs d'identification (ID) de leurs contrôles enfants sont uniques dans l'ensemble de l'application. (Les contrôles génèrent un conteneur de dénomination en implémentant l'interface INamingContainer.) Lorsque des contrôles enfants sont créés au moment de l'exécution, le conteneur de dénomination est combiné avec la propriété ID du contrôle enfant pour créer la valeur de la propriété UniqueID de chaque contrôle enfant. Par conséquent, la propriété UniqueID devient un identificateur complet pour un contrôle, faisant référence à son conteneur de dénomination et à sa valeur d'ID individuelle.
Dans l'exemple ci-dessus, les multiples instances du contrôle Label sont créées à l'intérieur du conteneur de dénomination (ou espace de noms) du contrôle DataList parent. La propriété UniqueID de chaque contrôle Label reflète cet espace de noms qui possède un format similaire à DataList1:_ctl:MyLabel, DataList1:_ct2:MyLabel, etc.
Remarque : |
---|
N'écrivez pas de code référençant des contrôles à l'aide de la valeur de la propriété UniqueID générée. Vous pouvez traiter la propriété UniqueID comme un handle (par exemple, en la passant à un processus), mais vous ne devez pas compter sur le fait qu'elle possède une structure spécifique. |
Outre les contrôles conteneurs fournissant un conteneur de dénomination pour leurs contrôles enfants, la page elle-même fournit également un conteneur de dénomination pour tous ses contrôles enfants. Un espace de noms unique est ainsi créé à l'intérieur de l'application pour tous les contrôles de cette page.
Utilisation de la propriété NamingContainer
Les contrôles enfants peuvent faire référence à leur conteneur de dénomination via la propriété NamingContainer. Cette propriété retourne un objet de type Control, qui peut être casté en contrôle DataList, objet DataListItem, etc. approprié.
Il est utile de faire référence au conteneur de dénomination lorsque vous devez accéder à une propriété du contrôle conteneur depuis un contrôle enfant. Par exemple, vous pouvez accéder à l'objet DataItem, dans un gestionnaire d'un événement DataBinding d'un contrôle enfant, en le récupérant dans le conteneur de dénomination.
Remarque : |
---|
La propriété NamingContainer ne référence pas nécessairement le même contrôle que la propriété Parent. Par exemple, un contrôle Repeater peut contenir un modèle d'élément avec un tableau contenant à son tour un contrôle Label. Le contrôle parent de l'étiquette est une cellule de tableau (par exemple, un objet HtmlTableCell), mais son conteneur de dénomination est l'objet DataListItem, car c'est DataListItem, et non le tableau, qui définit l'espace de noms pour le contrôle Label. |
Références aux contrôles
Si votre page contient des contrôles générés au moment de l'exécution, comme ceux qui sont contenus dans un modèle pour les contrôles DataList, Repeater ou GridView, vous ne pouvez pas y faire référence directement par leur ID, car il n'est pas unique. Il existe toutefois différents moyens de rechercher des contrôles individuels dans la page. Pour plus d'informations, consultez Accès par programme aux contrôles ASP.NET.