ASP.NET:驗證控制項
ASP.NET:主版頁面與內容頁
ASP.NET:主題中的皮膚和樣式表
一、使用多種方式為內容頁載入主版頁面
預設情況下是給單個內容頁指定一個主版頁面載入,當多個內容頁需載入到同一個主版頁面時,我們可以通過設定檔為多個內容頁批量載入主版頁面,另外,還可以在PreInit事件中動態載入主版頁面。
1、為單個內容頁載入主版頁面時,自動在內容頁的Page指令裡加上MasterPageFile屬性
<%@ PageTitle=""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(objectsender,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(objectsender,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;}
}
然後在內容頁中轉換主版頁面為特定的主版頁面類型,
<%@ MasterTypeVirtualPath="~/masterpage/MasterPage.master"%>
最後在內容頁中調用主版頁面公開的屬性,設定其值,Master.BodyTitle = "內容頁";
三、謹慎使用主版頁面中控制項的相關URL屬性
主版頁面中可以包含用戶端控制項和伺服器端控制項,各個內容頁與之合并時,其相關的URL屬性需解析為當前內容頁對應可用的URL。
1、當使用用戶端控制項相關URL屬性時,需要使用Page.ResolveUrl(“相對於整個虛擬目錄的相對路徑”)方法解析為當前內容頁對應可用的URL,
如<img src="logo.gif"alt=""/>需要修改為<imgsrc="<%=Page.ResolveUrl("~/MasterPage/logo.gif")%>"alt=""/>,否則不能夠正確顯示;
2、當使用伺服器端控制項相關URL屬性時,自動解析為當前內容頁對應可用的URL,
如<asp:ImageID="Image1"runat="server" ImageUrl="~/MasterPage/logo.gif" />