2010-08-13 2 views
2

여러 ContentPlaceHolders가있는 마스터 페이지가 있습니다. 현재 모든 콘텐츠 페이지에서 항상 사용되는 것은 아닙니다. 페이지 렌더링 중에 ContentPlaceHolder가 현재 콘텐츠 페이지에서 사용되지 않을 때 마스터 페이지는 속성을 설정해야합니다. 콘텐츠 페이지에서 ContentPlaceHolder를 참조하지 않을 수도 있음을 의미합니다.마스터 페이지는 현재 콘텐츠 페이지에서 ContentPlaceHolder를 사용하지 않았 음을 알아야합니다.

마스터 페이지가 ContentPlaceHolders를 반복하고 현재 콘텐츠 페이지에서 사용되지 않은 것을 찾는 가장 좋은 방법은 무엇입니까? 콘텐츠 페이지에서 마스터 페이지로의 커뮤니케이션을 포함하지 않는 솔루션을 찾고 있습니다.

답변

1

마스터 페이지의 PreRender 이벤트에서 수행하십시오. 이번에는 페이지 사이클에 따라 모든 컨트롤이 만들어집니다.

YourMasterPage.master.cs 

protected void Page_PreRender(...) { 
    HidePlaceholders(this); 
} 

protected void HidePlaceholders(Control control) 
{ 
    foreach (Control ctrl in control.Controls) 
    { 
     if (ctrl is ContentPlaceHolder) 
     { 
      if (ctrl.Controls.Count == 0) 
      { 
       ctrl.Visible = false; 
      } 

     } 
     else 
     { 
      if (ctrl.Controls.Count > 0) 
      { 
       HidePlaceholders(ctrl); 
      } 
     } 

    } 
} 
+0

ContentPlaceHolders에는 공백이 없어야합니다. –

+0

그런 다음 채울 때이를 처리해야합니다. 컨트롤은 모든 것을 할 수 없습니다 :) – TheGeekYouNeed

0

장소 소유자의 기본 콘텐츠를 사용하지 않는 이유가 있습니까? 이렇게 :

<!-- Site.Master --> 
<asp:ContentPlaceHolder ID="SomeCotnent"> 
    <p>Content here will only appear if it's not overridden in content pages</p> 
</asp:ContentPlaceHolder> 
+0

이러한 콘텐츠 소유자는 다른 html 요소가 포함 된 패널 (또는 div) 내에 포함되어 있습니다. 각 contentplaceholder가 사용되지 않으면 이러한 추가 html 요소를 렌더링하지 않도록 보이지 않아야합니다. –

관련 문제