HOW TO:參考 ASP.NET 主版頁面內容
更新:2007 年 11 月
您可以在內容頁面中撰寫程式碼,這個程式碼會參考主版頁面 (Master Page) 中的屬性 (Property)、方法和控制項,但有一些限制。屬性和方法的規則是,如果屬性和方法已宣告為主版頁面的 Public 成員,則可以參考這些屬性和方法。這包括 public 屬性和 public 方法。而參考主版頁面上的控制項與參考 Public 成員之間,並沒有關係。
若要參考主版頁面上的 Public 成員
在內容頁面中加入 @ MasterType 指示詞。在指示詞中,將 VirtualPath 屬性 (Attribute) 設為主版頁面的位置,如本例所示:
<%@ MasterType virtualpath="~/Masters/Master1.master" %>
這個指示詞會使內容頁面的 Master 屬性 (Property) 變成強型別 (Strongly Typed)。
如本例所示撰寫程式碼,該程式碼會使用主版頁面的 Public 成員做為 Master 屬性 (Property) 的成員,並將主版頁面中名為 CompanyName 的 public 屬性 (Property) 值指定給內容頁面中的文字方塊:
CompanyName.Text = Master.CompanyName
CompanyName.Text = Master.CompanyName;
若要參考主版頁面上的控制項
使用 FindControl 方法,並將 Master 屬性 (Property) 傳回的值當做方法的命名容器使用。
下列程式碼範例會示範如何使用 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; } }