一、使用多種方式為内容頁加載母版頁
預設情況下是給單個内容頁指定一個母版頁加載,當多個内容頁需加載到同一個母版頁時,我們可以通過配置檔案為多個内容頁批量加載母版頁,另外,還可以在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" />