web-dev-qa-db-fra.com

Balise d'étiquette HTML et ASP.NET

Quelle est la meilleure façon d'utiliser la balise <label> dans une application ASP.NET? Je veux qu'il soit valide, accessible et utilisable en XHTML.

Je comprends la manière optimale est la suivante:

<label for="Username">Username:</label>
<input type="text" id="Username" runat="server" />

Mais si le code ci-dessus est dans un contrôle utilisateur ASP.Net, l'ID d'entrée changera, ce qui signifie que l'attribut "pour" de l'étiquette est inutile. Je pourrais transformer l'étiquette en contrôle de serveur et définir son attribut "pour" dans le code (Username.ClientID), mais cela semble demander beaucoup de travail.

J'ai aussi vu ce code HTML utilisé dans le passé:

<label>
    <span>Username</span>
    <input type="text" id="Username" runat="server" />
</label>

Quelle est l'approche optimale?

45
Alex York

J'utilise <asp:Label ... AssociatedControlID="Username" ...> contrôles pour cela. Ils sont rendus sous forme de balises <label> et définissent l'attribut for de manière appropriée.

Notez que vous pouvez également imbriquer d'autres balises dans le contrôle Label si vous le souhaitez:

<asp:Label ID="UsernameLabel"
           Text="Username:"
           AssociatedControlID="UsernameTextBox"
           runat="server">
    <asp:TextBox ID="UsernameTextBox" runat="server" />
</asp:Label>
66
Sean Bright

Vous pouvez aussi l'écrire comme ceci:

<label for="<%= Username.ClientID %>">Username:</label>
<asp:TextBox ID="Username" runat="server" />

Phil Haack a un billet de blog sur ce sujet

18
Christian Hagelid

utilisez le contrôle serveur <asp:Label>. Il possède une propriété que vous pouvez utiliser pour définir l'ID de contrôle associé.

<asp:Label ID="label1" runat="server" Text="Username" AssociatedControlID="Text1" />
<asp:TextBox ID="Text1" runat="server" />
9
Matt Brunell

Je suppose que la façon la plus simple de le faire est la suivante.

<asp:Label AssociatedControlID="Username" runat="server" Text="Username:"></asp:Label>
<asp:TextBox ID="Username" runat="server"></asp:TextBox>

EDIT: Wow .. toutes les mêmes réponses dans la minute. =)

7
Brian Kim

Si vous utilisez .NET 4, vous pouvez maintenant utiliser la propriété ClientIDMode pour configurer un ou plusieurs contrôles afin d'utiliser des ID statiques ou prévisibles. La propriété ClientIDMode peut être définie directement sur la zone de texte ou sur n'importe quel contrôle parent ou sur la page qui le contient.

<label for="Username">Username:</label>
<asp:TextBox ID="Username" runat="server" ClientIDMode="Static" />

En savoir plus sur le ClientIDMode sur MSDN

3

Si vous voulez une étiquette, mais que vous n'avez pas d'autre contrôle à utiliser dans AssociatedControlID, vous pouvez utiliser l'étiquette elle-même.

<asp:Label ID="Not_Span" AssociatedControlID="Not_Span" Text="Will be rendered as label" />
3
RMalke
<p><asp:Label ID="label1"           Text="Username:"           AssociatedControlID="txtUserName"           runat="server">    <asp:TextBox ID="txtUserName" runat="server" /></asp:Label></p>
0
chugh97

Vous pouvez aussi essayer et ceci:

<asp:Label  ID="Label1" runat="server" Text="label"></asp:Label>

C'est ce que Visual Studio, ou tout autre logiciel, vous donne si vous faites glisser une étiquette. 

0
magn