정보, 통신, 기술/ASP.NET과 Dev

[ASP.NET] 마스터 페이지 사용

최윤호 2008. 10. 14. 15:52
반응형
마스터 페이지를 사용하다보면 마스터-자식 페이지간의 콘트롤이 찾아지지 않아 귀찮은 순간이 있습니다.

1. 자식 페이지에 있는 콘트롤의 ID가 변경되는 경우
보통은 페이지의 서버 콘트롤의 ID가 변경이 안되지만, 마스터 페이지를 사용하면 임의로 콘트롤 ID를 변경해서, 클라이언트에서 JS 등을 이용해 접근할 때 에로가 있습니다.

var Label1 = document.getElementById("<%=Label.ClientID %>");

2. 자식 페이지에서 마스터 페이지의 콘트롤에 접속하고 싶은 경우
페이지 제목 등과 같이 디자인 요소는 마스터 페이지에 있는 것을 자식 페이지에서 콘트롤해야 하는 경우에는 아래 함수를 사용해 콘트롤을 찾아서 사용할 수 있습니다.

protected void doSomething()
{

    Label label = (Label) FindControlRecursive(this.Master, "FieldNameID");
    label.Text = texto;
}


public Control FindControlRecursive(Control Root, string Id)
{

    if (Root.ID == Id)
        return Root;

    foreach (Control Ctl in Root.Controls)
    {
        Control FoundCtl = FindControlRecursive(Ctl, Id);
        
        if (FoundCtl != null)
            return FoundCtl;
    }
    return null;
}
** http://www.dotnetspace.com/articles/general-articles/how-to-find-a-control-when-using-master-pages.html

이 함수는 꼭 마스터 페이지를 사용하는 경우뿐만 아니라 다른 경우에도 사용 가능합니다. 물론 마스터-자식 페이지 구조가 아니라면 기본적으로 콘트롤이 찾아지겠지만요.
반응형

'정보, 통신, 기술 > ASP.NET과 Dev' 카테고리의 다른 글

ASP.NET Event Validation  (1) 2010.03.09
.NET에서 ORA-32036 이상 에러 발생  (0) 2010.02.24
[MS] VS2008 영문판 출시  (1) 2007.11.21
[링크] 자바스크립트 디버깅  (0) 2007.09.18
[Dev Tip] .net 개발 팁  (0) 2007.02.26