如何在ASP.NET中使用<label>标签?

54

我如何在ASP.NET应用程序中使用<label>标签?我希望它是有效的,可访问的和可用的。

我理解最佳的HTML方式是这样的:

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

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

我以前也见过使用这个HTML:

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

应该采取什么正确的方法?

8个回答

74

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

6
我也使用这种方法,但对于标签标记始终将EnableViewState="False"设置为真,特别是对于大型表单而言。在我看来,视图状态越小越好。请参阅https://dev59.com/oXVD5IYBdhLWcg3wBm1g - Jon P
3
在Web.Config页面设置中关闭ViewState,仅在需要它的控件上打开它,我觉得更容易操作。如果你对所有控件都开启ViewState,它会严重拖慢加载速度。是的,ViewState的负担真的很大。 - Brian Kim
你也要小心。可能你想要一个<label>标签,但asp:Label控件实际上会呈现一个<span>标签。 - Eduardo La Hoz Miranda
5
如果 asp:Label 控件有 AssociatedControlID 属性,它将正确地呈现一个 <label> 标签而不是通常的 <span>。 - goodeye
将其他标签嵌套在标签控件中是否有区别? - Félix LD
显示剩余2条评论

18

你也可以这样写:

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

Phil Haack在这个主题上有一篇博客文章


OP在问题中已经提到他们知道可以这样做。 - TylerH

10

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

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

7
我想最简单的方法是这样做。
<asp:Label AssociatedControlID="Username" runat="server" Text="Username:"></asp:Label>
<asp:TextBox ID="Username" runat="server"></asp:TextBox>

4
如果想要一个标签,但是没有其他控件可以在“AssociatedControlID”中使用,可以使用标签本身。
<asp:Label ID="Not_Span" AssociatedControlID="Not_Span" Text="Will be rendered as label" />

3

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

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

MSDN上了解有关ClientIDMode的更多信息。


-1
你也可以尝试这个:
<asp:Label  ID="Label1" runat="server" Text="label"></asp:Label>

这就是当你拖放一个标签时,Visual Studio或任何其他软件所提供的内容。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接