[.net] Master page與Nested Master page,重複應用的網頁結構樣版(上)

  • 10513
  • 0

[.net] Master page與Nested Master page,重複應用的網頁結構樣版(上)

網頁製作中,網站整體的header與footer等最外層的結構,往往是每頁相同而且重複的內容,簡而言之就是網頁的樣版結構,在Dreamweaver中有提供Template的功能,在.net的世界中則提供了Master page 與 Nested Master page來幫助我們達成重複性框架的製作與方便的修改維護,畢竟都長的一樣的東西,當然是一次修改就搞定全部是最聰明的做法啦!

網頁製作中,網站整體的header與footer等最外層的結構,往往是每頁相同而且重複的內容,簡而言之就是網頁的樣版結構,在Dreamweaver中有提供Template的功能,在.net的世界中則提供了Master page 與 Nested Master page來幫助我們達成重複性框架的製作與方便的修改維護,畢竟都長的一樣的東西,當然是一次修改就搞定全部是最聰明的做法啦!

要從何下手把Master page的範圍挖出來?一般我會先製作一個乾淨的框架html如下(請參考template.html),再把重複性需要做成master page的範圍挖出來。已下圖為例,版頭網站名稱、整個網頁範圍、版尾的版權宣告這三個區塊是重複性的區塊,所以要把這些放到master的檔案中。
ill1

Visual studio中,快速鍵crtl+shift+A新增Master page,頁面原始碼如下,

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="pre.Site1" %>
 
<!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></title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

預設的檔案結構會在<head>與<body>中挖出兩個區塊是變動內容的位置,asp語法如下
ill2

ID的名稱可以自行修改,取一個清楚易懂的ID,可以幫助你在套用master頁面的時候,更清楚區塊內容需要放置甚麼。接下來要從原先製作好的html版型中,把需要的內容放進master如下(參考檔案no2rab.Master)。

   1: <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="no2rab.master.cs" Inherits="pre.no2rab" %>
   2:  
   3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4: <html xmlns="http://www.w3.org/1999/xhtml">
   5: <head runat="server">
   6:     <title></title>
   7:     <link rel="stylesheet" type="text/css" href="css/nestedMaster.css">
   8:     <asp:ContentPlaceHolder ID="head" runat="server">
   9:     </asp:ContentPlaceHolder>
  10: </head>
  11: <body>
  12:     <form id="form1" runat="server">
  13:     <!-- wrapper 頁牆 start -->

  14:     <div class="wrapper">
  15:         <!-- header 版頭 start -->
  16:         <div class="header">
  17:             <h1>
  18:                 這是網站名稱</h1>
  19:         </div>
  20:         <!-- header 版頭 end -->
  21:         <!-- content 內容 start -->
  22:         <div class="content">
  23:             <asp:ContentPlaceHolder ID="page" runat="server">
  24:             </asp:ContentPlaceHolder>
  25:         </div>
  26:         <!-- content 內容 end -->
  27:         <!-- copyright 版權聲明 start -->
  28:         <div class="copyright">
  29:             <p>
  30:                 &copy;2012 no2rab. All Rights Reserved.</p>
  31:         </div>
  32:         <!-- copyright 版權聲明 end -->
  33:     </div>
  34:     <!-- wrapper 頁牆 end -->
  35:     </form>
  36: </body>
  37: </html>

製作好master之後,就可以套用到新的頁面上,Visual studio中,快速鍵crtl+shift+A新增Web Form using Master Page,

ill3

選取要套用的Master名稱"no2rab.Master”

ill4

確認後新增頁面原始碼如下,請參考檔案"pageUseMaster.aspx"

   1: <%@ Page Title="" Language="C#" MasterPageFile="~/no2rab.Master" AutoEventWireup="true" CodeBehind="pageUseMaster.aspx.cs" Inherits="pre.pageUseMaster" %>
   2: <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
   3: </asp:Content>
   4: <asp:Content ID="Content2" ContentPlaceHolderID="page" runat="server">
   5: 這邊就是內容區域
   6: </asp:Content>

我們可以看到第4行,ContentPlaceHolderID="page",在這裡ContentPlaceHolderID顯示的就是在Master page中我們設定的區塊ID,也就是說我們將這頁要放的內容放在ContentPlaceHolderID="page"這個區段中,就會呈現在原本master中所設定的內容區域。
ill5

執行後頁面呈現如下圖。

2012-02-28_203828

這是最基本套用單一Master頁面的方式,對於簡單結構的網站已經很夠用了,但對付複雜結構的網站,我們要利用Nested Master Page來達成更靈活的套用效果,下次就來聊聊Nested Master Page,所謂的巢狀Master頁面。

btn_download master.zip