HOW TO:參考 ASP.NET 主版頁面內容

更新:2007 年 11 月

您可以在內容頁面中撰寫程式碼,這個程式碼會參考主版頁面 (Master Page) 中的屬性 (Property)、方法和控制項,但有一些限制。屬性和方法的規則是,如果屬性和方法已宣告為主版頁面的 Public 成員,則可以參考這些屬性和方法。這包括 public 屬性和 public 方法。而參考主版頁面上的控制項與參考 Public 成員之間,並沒有關係。

若要參考主版頁面上的 Public 成員

  1. 在內容頁面中加入 @ MasterType 指示詞。在指示詞中,將 VirtualPath 屬性 (Attribute) 設為主版頁面的位置,如本例所示:

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

    這個指示詞會使內容頁面的 Master 屬性 (Property) 變成強型別 (Strongly Typed)。

  2. 如本例所示撰寫程式碼,該程式碼會使用主版頁面的 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;
        }
    }
    

請參閱

概念

ASP.NET 主版頁面概觀

以程式設計方式使用 ASP.NET 主版頁面

其他資源

以程式設計方式存取 ASP.NET 控制項