방법: ASP.NET 마스터 페이지 내용 참조
업데이트: 2007년 11월
몇 가지 제한을 적용하여 마스터 페이지의 속성, 메서드 및 컨트롤을 참조하는 코드를 콘텐츠 페이지에 작성할 수 있습니다. 속성 및 메서드의 경우, 속성 및 메서드가 마스터 페이지의 공용 멤버로 선언된 경우에 참조할 수 있다는 규칙이 적용됩니다. 여기에는 공용 속성과 공용 메서드가 포함됩니다. 마스터 페이지의 컨트롤은 공용 멤버 참조에 관계없이 참조할 수 있습니다.
마스터 페이지의 공용 멤버를 참조하려면
콘텐츠 페이지에 @ MasterType 지시문을 추가합니다. 다음 예제처럼 지시문에서 VirtualPath 특성을 마스터 페이지의 위치로 설정합니다.
<%@ MasterType virtualpath="~/Masters/Master1.master" %>
이 지시문은 콘텐츠 페이지의 Master 속성을 강력한 형식으로 만듭니다.
이 예제와 같이 마스터 페이지의 공용 멤버를 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 마스터 페이지에서 프로그래밍 방식으로 작업