天天看點

ASP.NET:母版頁與内容頁

 一、使用多種方式為内容頁加載母版頁

預設情況下是給單個内容頁指定一個母版頁加載,當多個内容頁需加載到同一個母版頁時,我們可以通過配置檔案為多個内容頁批量加載母版頁,另外,還可以在PreInit事件中動态加載母版頁。

1、為單個内容頁加載母版頁時,自動在内容頁的Page指令裡加上MasterPageFile屬性

<% @ Page Title ="" Language ="C#" MasterPageFile ="~/MasterPage/Site.Master" …… %>

2、為多個内容頁批量加載母版頁時,在配置檔案裡添加MasterPageFile屬性

< configuration >

  < system.web >

    < pages masterPageFile = "~/MasterPage/Site.Master "/>

  </ system.web >

</ configuration >

此時,配置檔案目錄下的所有内容頁都會批量加載該母版頁,普通頁面會被母版頁忽略,但要記得去掉内容頁裡Page指令的MasterPageFile屬性,否則會重寫配置檔案裡的MasterPage屬性。

3、PreInit事件中動态加載母版頁

母版頁的加載在PreInit事件中,可以使用如下代碼動态加載,

 protected void Page_PreInit(object sender,EventArgs e)

{

    MasterPageFile = "~/MasterPage/Site.Master" ;

}

二、如何在内容頁中修改關聯母版頁的内容

很多時候多個内容頁加載同一個母版頁,為了使各個内容頁中加載的同一個母版頁内容有所不同,我們需要修改合并在内容頁中的母版頁内容。

1、修改Title标簽屬性

當母版頁的head标簽包含Runat=”Server”屬性時,可以修改内容頁的title标簽屬性,使其不顯示母版頁的預設title,

方法一是通過内容頁前台設定的Page指令的Title屬性,

<% @ Page  Title ="前台設定内容頁标題" Language ="C#" AutoEventWireup ="true" …… %>

方法二是通過内容頁背景設定Page.Header.Title 的值,

Page.Header.Title = "程式設計改變内容頁标題" ;

2、修改Head标簽屬性

當母版頁的head标簽包含Runat=”Server”屬性時,我們可以通過背景代碼修改head标簽包含的标簽屬性,并可以為 head标簽動态添加指定的标簽,如“meta”标簽;代碼中Page.header傳回的是HtmlHead對象,代表head标簽,HtmlMeta 對象代表Meta标簽。

using System.Web.UI.HtmlControls;

……

……

protected void Page_Load(object sender,EventArgs e)

{

    //修改head标簽中的title标簽屬性

    Page.Header.Title = "程式設計改變内容頁标題" ;

    //修改head标簽包含的其它标簽屬性,間接修改了頁面背景顔色

    Style myStyle = new Style ();

    myStyle.BackColor = System.Drawing.Color .Red;

    Page.Header.StyleSheet.CreateStyleRule(myStyle, null ,"html" );

    //添加新标簽meta到head标簽中

    HtmlMeta metaKeywords = new HtmlMeta ();

    metaKeywords.Name = "KEYWORDS" ;

    metaKeywords.Content = "asp.net,c#" ;

    HtmlHead head = Page.Header;

    head.Controls.Add(metaKeywords);

}

3、修改其它伺服器控件屬性

A、直接修改法:

通過ID查找母版頁控件,((Label )Master.FindControl("Label1" )).Text ="内容頁" ;

B、間接修改法:

先在母版頁中将需要修改的控件屬性包裝成公開屬性,

public string BodyTitle

{

    get {return this .Label1.Text;}

    set { this .Label1.Text =value ;}

}

然後在内容頁中轉換母版頁為特定的母版頁類型,

<% @ MasterType VirtualPath ="~/masterpage/MasterPage.master" %>

最後在内容頁中調用母版頁公開的屬性,設定其值,Master.BodyTitle = "内容頁" ;

三、謹慎使用母版頁中控件的相關URL屬性

母版頁中可以包含用戶端控件和伺服器端控件,各個内容頁與之合并時,其相關的URL屬性需解析為目前内容頁對應可用的URL。

1、當使用用戶端控件相關URL屬性時,需要使用Page.ResolveUrl(“相對于整個虛拟目錄的相對路徑”) 方法解析為目前内容頁對應可用的URL,

如< img src ="logo.gif" alt =""/>需要修改為 < img src =" <% =Page.ResolveUrl("~/MasterPage/logo.gif")%> " alt =""/>,否則不能夠正确顯示;

2、當使用伺服器端控件相關URL屬性時,自動解析為目前内容頁對應可用的URL,

如 < asp : Image ID ="Image1" runat ="server" ImageUrl ="~/MasterPage/logo.gif" />