2011-08-13 5 views
0

은 마스터 페이지 PlaceHolder에로드 된 컨텐츠 요소의 요소 ID를 가져 오는 방법입니까?마스터 페이지 ContentPlaceHolder에서 컨텐츠 ID 가져 오기

EX를 들어

: 내 마스터 페이지,

<form id="form1" runat="server"> 
    <div> 
     <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> 

     </asp:ContentPlaceHolder> 
    </div> 
    </form> 

다음은 다른 페이지 사용하여 마스터 페이지입니다 : 마스터 PageLoad의 콘텐츠 ID ("Content2")를 얻을 수있는 방법

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
I am the child page 
<asp:Label ID="lbl" runat="server"></asp:Label> 
</asp:Content> 

.

Can 아무나 제안하십시오. 사전

+0

해당 콘텐츠 섹션 내부 컨트롤에 도착하는 당신의 진짜 목표 (즉, "lbl"레이블)? – patmortech

+0

콘텐츠 섹션 ID (예 : "Content2")를 가져와야합니다. – sandeep

+0

@sandeep : 제공 한 코드 스 니펫을 사용해 보셨습니까? – sll

답변

1

같이 얻을 수 있습니다. 나는 당신의 궁극적 인 목표는 그 부분의 컨트롤에 액세스 할 여부에 대해 물었다

A Content control is not added to the control hierarchy at runtime. Instead, the contents within the Content control are directly merged into the corresponding ContentPlaceHolder control.

은 그 : 그것은 this MSDN page 말한다대로 asp:Content 컨트롤은 실제로 페이지의 컨트롤 계층 구조의 일부가 아닙니다. 그렇다면 ContentPlaceHolder 컨트롤을 통해 액세스 할 수 있습니다. 런타임에 내용 섹션에 있던 모든 컨트롤이 내부에 있기 때문입니다. 당신은 당신의 masterpage에서이 작업을 수행 할 수 있습니다

Label lbl = ContentPlaceHolder1.FindControl("lbl") As Label; 
1

에서

덕분에 당신은 당신이 원하는 것은 불가능합니다 ..

((ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1")).ClientID 
+0

나는 이것을 시험해 보았지만 나는 발을 갖지 못했다. – sandeep

+0

사소한 변경을 했으므로 지금 시도하십시오. 브래킷이 빠졌습니다. –

+0

위의 코드를 CodeBehind의 Page Template (Page) PageLoad() Method에서 Master Template Page의 코드에서 사용 했는데도 오류가 발생합니다. System.NullReferenceException. Becoz Master 자체가 null입니다 – sandeep

2

당신은 MasterPage를 오버라이드 (override) 한 경우 보호 된 ContentPlaceHolders 모음에 액세스 할 수 있습니다

pubic class YourMasterPage : MasterPage 
{ 
    // in Page_Load try out 
    foreach(var placeHolder in this.ContentPlaceHolders) 
    { 
     var contentPlaceHolder = placeHolder as ContentPlaceHolder; 
     if(contentPlaceHolder != null) 
     { 
      Debug.WriteLine("ID: " + contentPlaceHolder.ID); 
      Debug.WriteLine("Client Id" + contentPlaceHolder.ClientID); 
     } 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 나는 이것으로 시도했다. 그러나 그것이 진술서에 전혀 들어 가지 않습니다. – sandeep

+0

.Net 4.0, MasterPage, ContentPlaceHolder 객체가 아닌 String 객체 (소문자 ContentPlaceHolder ID 포함)의 IList에있는 ContentPlaceHolders에 유의하십시오. 이 문서에서는 https://msdn.microsoft.com/en-us/library/system.web.ui.masterpage.contentplaceholders(v=vs.100).aspx가이 경우에 잘못되었습니다. –

관련 문제