2009-03-13 1 views
0

웹 양식 (.aspx) 또는 마스터 페이지 (.master)에 배치 할 수있는 컨트롤이 있습니다. 어떤 것이 있는지에 따라 다르게 작동하기를 원합니다.컨트롤이 웹 폼이나 마스터 페이지에서 렌더링하는지 확인하는 가장 효율적인 방법은 무엇입니까?

첫 번째 생각은 제어 트리를 루트로 다시 올라가서 MasterPage 컨트롤을 넘는 지 확인하는 것입니다. 그렇다면 마스터 페이지에 있어야합니다.

하지만 이는 비효율적 인 것으로 보입니다. 더 좋은 방법이 있습니까?

답변

0

먼저 확인됩니다 컨트롤이 아니라면

. 그런 다음 컨트롤 트리를 통해 콘텐트 위치 홀더를 찾으십시오.

public static bool IsInMaster(Control control) { 
    if (control.Page.Master == null) return false; 
    while (control != null) { 
     if (control is ContentPlaceHolder) return false; 
     control = control.Parent; 
    } 
    return true; 
} 
+0

우수 솔루션. 감사. – Deane

0

더 효율적인 방법이 있는지 확실하지 않지만 계층 구조를 등반하는 경우 NamingContainer을 사용하십시오. 이것을 사용하면 불필요한 홉을 건너 뛸 것입니다. 페이지에 시간이 많이 나타납니다 페이지가 모든 마스터 페이지가있는 경우 NamingContainer를 통과하는 것은 더 충분 :)

관련 문제