2013-06-07 5 views
3

У меня есть asp:label с вложенным пользовательским элементом управления и он просто не отображает. Я попытался зарегистрировать пользовательский WebControlAdapter для типа Label, и во время отладки я заметил, что в коллекции , по-видимому, нет контроля, он, кажется, полностью игнорирует любые вложенные элементы.asp: ярлык не отображает детей

Вот разметки

<asp:Label ID="lbl13" runat="server" AssociatedControlID="txt13" Text="<%$ Resources:Resources, lbl13 %>"> 
    <asp:ValidationMessage ID="vm13" runat="server" MessageFor="txt13" CssClass="field-validation-error"></asp:ValidationMessage> 
</asp:Label> 

Любая идея, как обойти эту проблему?

+0

Переместить 'asp: ValidationMessage' вне стороны' asp: Label'. – Win

+0

Что делать, если я хочу, чтобы он действительно вложен в тег метки. –

+0

Работает ли управление '' ValidationMessage'' вне контроля 'Label'? В чем причина размещения элемента управления внутри элемента управления «Label»? – Win

ответ

6

Когда вы устанавливаете свойство Text, оно очищает дочерние элементы управления. Если вы удалите Text="<%$ Resources:Resources, lbl13 %>" с Label, ваши дочерние элементы управления должны отобразить.


EDIT
Если установить Text свойство статической строки и добавить только буквальное содержание, метка будет только оказывать дословное содержание:

<asp:Label runat="server" Text="Hello"> World</asp:Label> 
Output: World 

Если установить Text недвижимость к статической строке и добавлению дочерних элементов управления, метка будет отображать текст и дочерние элементы управления:

<asp:Label runat="server" Text="Hello"> 
    <asp:Label runat="server" Text="World" /> 
</asp:Label> 
Output: HelloWorld 

Если установить Text свойство, используя построитель выражений, метка будет оказывать только текст:

<asp:Label runat="server" Text="<%$ Resources:Resources,Hello %>"> 
    <asp:Label runat="server" Text="World" /> 
</asp:Label> 
Output: Localised version of "Hello" 

Чтобы изменить это поведение, вы будете нуждаться в пользовательских Label управления. Например:

public class MyLabel : Label 
{ 
    public override string Text 
    { 
     get { return base.Text; } 
     set 
     { 
     if (HasControls()) 
     { 
      Controls.AddAt(0, new LiteralControl(value)); 
     } 
     else 
     { 
      base.Text = value; 
     } 
     } 
    } 
} 
+0

Это неправда. Текст будет отображаться перед элементами управления. – Win

+0

@Win: Это правда. Установщик в свойстве «Текст» «Ярлык» начинается с: 'if (HasControls()) Controls.Clear()' –

+0

@Win: он работает, только если вы установите текст * до *, вы добавите элементы управления. –