Вопрос

Как я могу использовать <label> пометить внутри приложения ASP.NET?Я хочу, чтобы он был действительным, доступным и годным к употреблению.

Я понимаю, что оптимальный способ HTML заключается в следующем:

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

Но если приведенный выше код находится в ASP.NET пользовательском элементе управления, идентификатор ввода изменится, что означает, что атрибут метки "for" бесполезен.Я мог бы сделать тег label серверным элементом управления и установить его атрибут "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" />

У Фила Хаака есть запись в блоге по этой теме

используйте <asp:Label> серверное управление.У него есть свойство, которое вы можете использовать для установки соответствующего идентификатора элемента управления.

<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 для настройки одного или нескольких элементов управления на использование статических или предсказуемых идентификаторов.Свойство ClientIDMode может быть задано непосредственно в текстовом поле или вы можете установить его на любом родительском элементе управления или содержащей странице.

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

Подробнее о режиме ClientIDMode читайте на MSDN

Если вам нужна метка, но у вас нет другого элемента управления для использования в 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 или любое другое программное обеспечение, если вы перетаскиваете ярлык.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top