Как заставить серверный элемент управления работать со свойством asp: Label's AssociatedControlID - PullRequest
3 голосов
/ 07 марта 2012

Когда вы устанавливаете свойство AssociatedControlID в элементе управления Label, он отображает HTML-тег <label> с атрибутом for, установленным в ClientID целевого элемента управления:

<label id="Label" for="TextBox">Dat TextBox</label>
<input id="TextBox" name="TextBox" type="text">

Я создал серверный элемент управления с TextBox, и мне бы хотелось, чтобы метка отображала свой атрибут for во внутреннем TextBox моего элемента управления. Моей первой мыслью было указать на мой серверный элемент управления:

<asp:Label ID="AwesomeLabel" runat="server" AssociatedControlID="AwesomeControl">
    Check out my awesome control!</asp:Label>
<custom:MyControl ID="AwesomeControl" runat="Server" />

Но это заставляет атрибут for указывать на <span>, который отображается вокруг содержимого серверного элемента управления:

<label id="AwesomeLabel" for="AwesomeControl">Check out my awesome control!</label>
<span id="AwesomeControl">
    <input name="AwesomeControl$ct123" type="text"></span>

Кажется, что AssociatedControlID устанавливает атрибут for, просто получая ClientID целевого элемента управления:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.label.associatedcontrolid.aspx

Я не хочу заходить на страницу .aspx.cs, чтобы установить это программно, потому что этот серверный элемент управления используется часто, и я бы хотел, чтобы его реализация была максимально быстрой.

Есть ли другой способ заставить теги Label отображать свои атрибуты for для внутреннего TextBox моего серверного элемента управления, либо в разметке .aspx, либо из кода моего серверного элемента управления?

Ответы [ 2 ]

5 голосов
/ 20 декабря 2012

Если ваш usercontrol имеет идентификатор AwesomeControl , а текстовое поле внутри usercontrol имеет идентификатор AwesomeTextbox , необходимо установить для AssociatedControlID следующее: AwesomeControl: AwesomeTextbox .

<asp:Label ID="AwesomeLabel" runat="server" AssociatedControlID="AwesomeControl:AwesomeTextbox">
Check out my awesome control!</asp:Label>
<custom:MyControl ID="AwesomeControl" runat="Server" />
1 голос
/ 07 марта 2012

В настоящее время ваш диапазон - это элемент, имеющий идентификатор, на который вы указываете, и ваш вход не имеет идентификатора.

Дайте элементу ввода идентификатор и измените метку, чтобы он указывал на этот идентификатор.

<asp:Label ID="AwesomeLabel" runat="server" AssociatedControlID="txtAwesomeControl">
    Check out my awesome control!</asp:Label>

<span id="AwesomeControl">
    <input id="txtAwesomeControl" name="AwesomeControl$ct123" type="text" />
</span>
...