一、母版頁
1、母版頁是指為應用程序中的頁創建一致的布局,為應用程序中的所有頁、或一組頁定義所需的外觀和標准行為,然后創建要顯示內容的各個頁內容,並將內容頁與母版頁相關聯。
當用戶請求內容頁的時候,內容頁和母版頁合並,將內容頁的內容與母版頁的布局相組合,然后再展示出來。(從這里我們可以看出,母版頁類似於一個框架,內容頁就是蓋在框架外的飾品,注意,如果 我們只有母版頁,沒有內容頁,這個頁面是沒有用處的)
從上,我們可以大致得出母版頁具有:易於站點修改和維護、減輕工作人員工作壓力;提高內容的整合能力;有利於實現頁面布局;提供一種便利的對象模型。
2、母版頁的創建(注:此處本人使用的是vs2017編輯器)
選擇母版頁:
上面我們就直接創建好了一個母版頁,然后我們查看它的控件,會發現,它會多有一個ContentPlaceHolder控件,在這里面,我們一般用來放內容頁面所需的js、css代碼。
3、內容頁的創建:(注意右下角選擇母版頁的選擇框)
這樣我們這個內容頁也就創建好了,從創建完的效果我們可以看出,該aspx文件和往常的文件有所不同:
1、內容頁中多了一個MasterPageFile屬性,從這個屬性的值中我們可以看出它實際上是指出了母版頁的位置。除此之外,我們仔細觀察.master(母版頁)中的代碼和.aspx(內容頁)中的代碼,我們會發現內容頁中包含有兩個ContentPlaceHolder控件,一個id是head,一個id是ContentPlaceHolder1;其中head是用來寫標題一類的CSS、Javascript代碼;另外的就是其余部分的了。內容頁和母版頁之間通過這兩個id進行對應綁定。注意:ContentPlaceHolder控件是不能夠額外添加的。
2、從上圖中我們可以看出該內容頁中僅有一個<asp:Conten>控件,它和母版頁中的ContenPlaceHolder相對應,兩個屬性相綁定。在ContenPlaceHolderID中寫HTML、JS代碼。
4、頁面運行機制
(1)用戶訪問內容頁;
(2)獲取內容頁后,讀取@Page指令,若指令引用到一個母版頁,則也讀取該母版頁,若為第一次請求,則兩個頁都要進行編譯;
(3)母版頁合並到內容頁的控件樹中;
(4)各個Content控件的內容合並到母版頁中相對應的ContentPlaceHolder控件中;
(5)呈現結果頁;
母版頁和內容頁處理順序
第01步、內容頁的 Page_PreInit
第02步、母版頁的 Page_Init
第03步、內容頁的 Page_Init
第04步、內容頁的 Page_InitComplete
第05步、內容頁的 Page_PreLoad
第06步、內容頁的 Page_Load
第07步、母版頁的 Page_Load
第08步、母版頁或內容頁的 按鈕點擊等回發事件(Master或Content的Button事件不會同時觸發)
第09步、內容頁的 Page_LoadComplete
第10步、內容頁的 Page_PreRender
第11步、母版頁的 Page_PreRender
第12步、內容頁的 Page_PreRenderComplete
第13步、內容頁的 Page_SaveStateComplete
第14步、母版頁的 Page_Unload
第15步、內容頁的 Page_Unload
5、在內容頁中訪問母版頁
弱類型引用:使用FindControl方法傳遞一個控件的ID
輸出結果
強類型引用:訪問模板頁中公開屬性和方法
以上是主要的代碼,最后輸出結果和上面的一樣。
我們需要關注的點在於:
需要將Master顯式地轉換為母版頁類型(MasterPage)。則需要在頁面中使用@ MasterType指令,則可以創建對母版頁的強類型引用:(該指令添加在內容頁中)
<%@ MasterType TypeName="MasterPage" %> 或 <%@ MasterType VirtualPath="~/MasterPage.master" %>
//在內容頁中對母版頁中屬性訪問可修改為:
string strSearch = Master.SearchText;