Html标签标签和ASP.NET

在ASP.NET应用程序中使用<label>标记的最佳方法是什么? 我希望它是XHTML有效,可访问和可用的。

我了解最佳方式是这样的:

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

但是,如果上述代码位于ASP.NET用户控件中,则input标识将会更改,这意味着标签的“for”属性是无用的。 我可以使标签标签为服务器控件,并将其设置为代码中的“for”属性(Username.ClientID),但对于这样一个简单的事情来说,它似乎有很多工作要做。

我也看到过去使用的这个HTML:

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

什么是最佳方法?

我使用<asp:Label ... AssociatedControlID="Username" ...>控制这个。 它们被呈现为<label>标签,并适当地设置for属性。

请注意,如果您愿意,还可以在Label控件中嵌套其他标签:

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

你也可以这样写:

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

Phil Haack在这个话题上有一篇博文

使用<asp:Label>服务器控件。 它有一个属性,您可以使用它来设置关联的控件ID。

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

我想最简单的方法就是这样。

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

编辑:哇..所有在一分钟内相同的答案。 =)

如果您正在使用.NET 4,则可以使用ClientIDMode属性将一个或多个控件configuration为使用静态或可预测的ID。 ClientIDMode属性可以直接在TextBox上设置,也可以在任何父级控件或包含页面上设置。

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

阅读有关MSDN上 ClientIDMode的更多信息

如果你想要一个标签,但没有其他的控件在AssociatedControlID使用,你可以使用标签本身

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

你我也试试这个:

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

这是Visual Studio或任何其他软件为您提供的,如果您拖放标签。