2013-06-07 2 views
3

중첩 된 사용자 지정 컨트롤이있는 asp:label이 있는데 단순히 렌더링하지 않습니다. 나는 사용자 정의 WebControlAdapterLabel 유형으로 등록하려고 시도했지만 디버깅하는 동안 분명히 Controls 콜렉션에 제어가 없다는 것을 알았지 만 중첩 된 요소를 완전히 무시한 것으로 보입니다.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 속성을 설정하면 자식 컨트롤이 지워집니다. Label에서 Text="<%$ Resources:Resources, lbl13 %>"을 제거하면 하위 컨트롤이 렌더링됩니다.


편집
정적 문자열로 Text 속성을 설정 만 리터럴 내용을 추가하면, 라벨 만 리터럴 내용 렌더링 : 당신이 Text 속성을 설정하면

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

을 정적 문자열에 추가하고 하위 컨트롤을 추가하면 레이블은 텍스트 및 하위 컨트롤을 렌더링합니다.

<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 : 사실입니다. 'Label'''Text' 속성의 setter는 다음으로 시작합니다 :'If (HasControls()) Controls.Clear()' –

+0

@Win : 컨트롤을 추가하기 전에 * 텍스트를 설정하면 작동합니다. –