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