實現Master Page
在ASP.NET v2.0中,Master Page實現為一個Web頁面,其中包含內容頁面可以使用的預設面板和操作方式。多個內容頁面只需提供合并到Master Page中的內容標記,即可使用這個Master Page的統一外觀和操作方式。本節的樣本將使用VS 2005建立一個Master Page和簡單的內容頁面。首先,建立一個新的Web項目,刪除自動建立的Default.aspx頁面。後面在建立使用Master Page的內容頁面時,將再次建立Default.aspx。(1) 要建立Master Page,在Solution Explorer中右擊Web項目,選擇Add New Item,再選擇Master Page,給它指定名稱Company.master,然後單擊OK按鈕。這將建立一個新的Master Page。(2) 如果Master Page在HTML視圖中,就單擊編輯器左下角的Design按鈕,把它切換到設計檢視。選擇Layout | Insert Table,給Company.master添加一個新表。(3) 在Insert Table對話方塊中,選擇Template,再從下拉式清單中選擇“Header, footer and side”,1-9所示。(4) 表添加到頁面上後,選擇最上面一行的儲存格,輸入“My Company Header”,選擇第二行的第一個儲存格,輸入“Menu Goes Here”,再選擇第三行(最後一行)的儲存格,輸入“Copyright (C) 2006 My Company, All Rights Reserved”。(5) 第一次建立Master Page時,它會自動添加一個ContentPlaceHolder控制項。Company. master也是如此。把ContentPlaceHolder控制項拖放到剛才插入Company.master的表中第二行的第二個儲存格中。結果 1-10所示。圖 1-9圖 1-10建立和修改Company.master後,就可以單擊編輯器左下角的HTML按鈕,查看自動產生的HTML代碼了。程式清單1-4列出了為Company.master進行上述修改後的HTML。程式清單1-4 格式化定製頁面元素的Master Page:Company.master<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Company.master.cs" Inherits="Company" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>My Company</title></head><body> <form id="form1" runat="server"> <div> <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%"> <tr> <td colspan="2" style="height: 200px"> <h1>My Company Header</h1> </td> </tr> <tr> <td style="width: 200px"> Menu Goes Here</td> <td> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> </td> </tr> <tr> <td colspan="2" style="height: 200px"> Copyright (C) 2006 My Company, All Rights Reserved </td> </tr> </table> </div> </form></body></html>在程式清單1-4中,首先要注意,在頁面的頂部包含一個Master指令。如codefile和inherits特性所述,可以給Master Page添加一個代碼檔案。該頁面的大多數內容都是HTML格式化標記。這個頁面的另一個相關部分是contentplaceholder元素。可以在這裡放置預設內容,但內容頁面將使用id指定其內容顯示在什麼地方,這將覆蓋預設的內容。現在可以將這個Master Page用於任意內容頁面了。建立內容頁面的過程與建立其他Web表單非常相似。在Solution Explorer中右擊Web項目,選擇Add New Item,再選擇Web Form,接受推薦的名稱Default.aspx。選中Select Master Page選項,最後單擊OK按鈕。程式清單1-5列出了修改後的新內容頁面。程式清單1-5 使用Master Page的內容頁面: Default.aspx<%@ Page Language="C#" MasterPageFile="~/Company.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Content Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <h2>This is my content.</h2> </asp:Content>程式清單1-5中的兩個有趣的地方是MasterPageFile特性和Content元素。Page指令包含一個新特性MasterPageFile,它指定要使用的Master Page的檔案名稱。在程式清單1-5中,顯然內容頁面沒有像一般Web Form那樣的HTML標記。相反,用ContentPlaceHolderID特性指定contentplaceholder的id(在Master Page中),就可以添加一個Content元素,指定在Master Page的什麼地方放置內容標記。只有Content元素中的標記才顯示在Master Page中。由於沒有一般的HTML標記,例如Head,所以要用Head標題元素中的內容設定Page指令的Title特性。