方法 : ASP.NET マスター ページのコンテンツを参照する
更新 : 2007 年 11 月
コンテンツ ページには、一定の制約の下で、マスタ ページのプロパティ、メソッド、およびコントロールを参照するコードを記述できます。プロパティとメソッドには、それらがマスタ ページのパブリック メンバとして宣言されている場合に参照できるという規則があります。この規則に適合するのは、パブリック プロパティとパブリック メソッドです。マスタ ページのコントロールは、パブリック メンバの参照とは無関係に参照できます。
マスタ ページのパブリック メンバを参照するには
@ MasterType ディレクティブをコンテンツ ページに追加します。次の例に示すように、このディレクティブの VirtualPath 属性にはマスタ ページの場所を設定します。
<%@ MasterType virtualpath="~/Masters/Master1.master" %>
このディレクティブにより、コンテンツ ページの Master プロパティが厳密に型指定されます。
マスタ ページのパブリック メンバを Master プロパティのメンバとして使用するコードを、次の例に示すように記述します。この例では、マスタ ページの CompanyName というパブリック プロパティの値をコンテンツ ページのテキスト ボックスに割り当てます。
CompanyName.Text = Master.CompanyName
CompanyName.Text = Master.CompanyName;
マスタ ページのコントロールを参照するには
FindControl メソッドを使用し、Master プロパティによって返される値を名前付けコンテナとして使用します。
次のコード例は、FindControl メソッドを使用して、マスタ ページの 2 つのコントロール (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; } }