天天看點

對于母版頁的一些修改

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

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