53

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

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

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

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

我也见过过去使用的这个 HTML:

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

什么是正确的方法?

4

8 回答 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>
于 2009-01-29T22:41:30.660 回答
17

你也可以这样写:

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

Phil Haack 有一篇关于这个主题的博文

于 2010-07-29T04:43:08.010 回答
10

使用<asp:Label>服务器控件。它具有可用于设置关联控件 ID 的属性。

<asp:Label ID="label1" runat="server" Text="Username" AssociatedControlID="Text1" />
<asp:TextBox ID="Text1" runat="server" />
于 2009-01-29T22:43:35.447 回答
7

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

<asp:Label AssociatedControlID="Username" runat="server" Text="Username:"></asp:Label>
<asp:TextBox ID="Username" runat="server"></asp:TextBox>
于 2009-01-29T22:43:44.883 回答
4

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

<asp:Label ID="Not_Span" AssociatedControlID="Not_Span" Text="Will be rendered as label" />
于 2015-10-13T13:45:43.440 回答
3

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

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

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

于 2011-05-21T14:21:21.473 回答
-1
<p><asp:Label ID="label1"           Text="Username:"           AssociatedControlID="txtUserName"           runat="server">    <asp:TextBox ID="txtUserName" runat="server" /></asp:Label></p>
于 2009-01-30T09:53:24.253 回答
-1

你我也试试这个:

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

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

于 2016-05-10T12:29:18.493 回答