2009-01-29 139 views
42

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

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

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

但是,如果上面的代码是在ASP.NET用户控件,输入ID将会改变,这意味着标签的“为”属性是没用的。我可以将标签标记为服务器控件,并将其设置为代码中的“for”属性(Username.ClientID),但对于如此简单的事情来说,它似乎有很多工作要做。

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

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

什么是最佳方法?

回答

61

我使用<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> 
+5

我也使用这种方法,但始终为标签标签设置EnableViewState =“False”,特别是如果它是实质形式。在我看来,视角越小越好。 查看http://stackoverflow.com/questions/113479/when-to-enable-disable-viewstate – 2009-01-29 23:02:08

8

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

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

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

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

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

0
<p><asp:Label ID="label1"   Text="Username:"   AssociatedControlID="txtUserName"   runat="server"> <asp:TextBox ID="txtUserName" runat="server" /></asp:Label></p> 
16

你也可以写这样的:

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

菲尔哈克对这个话题blog post

3

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

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

了解更多有关的ClientIDMode上MSDN

3

如果你想有一个标签,但没有其他控制01​​一个使用可以使用标签本身

0

你我也试试这个:

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

这是什么Visual Stud io或任何其他软件都会在您拖放标签时提供给您。