방법: ASP.NET 마스터 페이지 내용 참조

업데이트: 2007년 11월

몇 가지 제한을 적용하여 마스터 페이지의 속성, 메서드 및 컨트롤을 참조하는 코드를 콘텐츠 페이지에 작성할 수 있습니다. 속성 및 메서드의 경우, 속성 및 메서드가 마스터 페이지의 공용 멤버로 선언된 경우에 참조할 수 있다는 규칙이 적용됩니다. 여기에는 공용 속성과 공용 메서드가 포함됩니다. 마스터 페이지의 컨트롤은 공용 멤버 참조에 관계없이 참조할 수 있습니다.

마스터 페이지의 공용 멤버를 참조하려면

  1. 콘텐츠 페이지에 @ MasterType 지시문을 추가합니다. 다음 예제처럼 지시문에서 VirtualPath 특성을 마스터 페이지의 위치로 설정합니다.

    <%@ MasterType virtualpath="~/Masters/Master1.master" %>
    

    이 지시문은 콘텐츠 페이지의 Master 속성을 강력한 형식으로 만듭니다.

  2. 이 예제와 같이 마스터 페이지의 공용 멤버를 Master 속성의 멤버로 사용하는 코드를 작성합니다. 그러면 마스터 페이지에 있는 공용 속성 CompanyName의 값이 콘텐츠 페이지의 텍스트 상자에 할당됩니다.

    CompanyName.Text = Master.CompanyName
    
    CompanyName.Text = Master.CompanyName;
    

마스터 페이지의 컨트롤을 참조하려면

  • Master 속성에서 반환된 값을 명명 컨테이너로 지정하여 FindControl 메서드를 사용합니다.

    다음 코드 예제에서는 FindControl 메서드를 사용하여 마스터 페이지의 TextBox 컨트롤 및 Label 컨트롤에 대한 참조를 가져오는 방법을 보여 줍니다. TextBox 컨트롤은 ContentPlaceHolder 컨트롤 내에 있으므로 먼저 ContentPlaceHolder에 대한 참조를 가져온 다음 이 컨트롤의 FindControl 메서드를 사용하여 TextBox 컨트롤을 찾아야 합니다.

    Sub Page_Load()
        Dim mpContentPlaceHolder As ContentPlaceHolder
        Dim mpTextBox As TextBox
        mpContentPlaceHolder = _
            CType(Master.FindControl("ContentPlaceHolder1"), _
            ContentPlaceHolder)
        If Not mpContentPlaceHolder Is Nothing Then
            mpTextBox = CType(mpContentPlaceHolder. _
                FindControl("TextBox1"), TextBox)
            If Not mpTextBox Is Nothing Then
                mpTextBox.Text = "TextBox found!"
            End If
        End If
    
        ' Gets a reference to a Label control not in a 
        ' ContentPlaceHolder
        Dim mpLabel As Label
        mpLabel = CType(Master.FindControl("masterPageLabel"), Label)
        If Not mpLabel Is Nothing Then
            Label1.Text = "Master page label = " + mpLabel.Text
        End If
    End Sub
    
    void Page_Load()
    {
        // Gets a reference to a TextBox control inside 
        // a ContentPlaceHolder
        ContentPlaceHolder mpContentPlaceHolder;
        TextBox mpTextBox;
        mpContentPlaceHolder = 
          (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
        if(mpContentPlaceHolder != null)
        {
            mpTextBox = 
                (TextBox) mpContentPlaceHolder.FindControl("TextBox1");
            if(mpTextBox != null)
            {
                mpTextBox.Text = "TextBox found!";
            }
        }
    
        // Gets a reference to a Label control that not in 
        // a ContentPlaceHolder
        Label mpLabel = (Label) Master.FindControl("masterPageLabel");
        if(mpLabel != null)
        {
            Label1.Text = "Master page label = " + mpLabel.Text;
        }
    }
    

참고 항목

개념

ASP.NET 마스터 페이지 개요

ASP.NET 마스터 페이지에서 프로그래밍 방식으로 작업

기타 리소스

프로그래밍 방식으로 ASP.NET 컨트롤 액세스