淺談Asp.Net母版頁(yè)的相關(guān)知識(shí)
Asp.Net母版頁(yè)的相關(guān)知識(shí)
母版頁(yè)的使用與普通頁(yè)面類似,可以在其中放置文件或者圖形、任何的HTML控件和Web控件,后置代碼等。母版頁(yè)的擴(kuò)展名以.master結(jié)尾,不能被瀏覽器直接查看。母版頁(yè)必須在被其他頁(yè)面使用后才能進(jìn)行顯示。
它的使用跟普通的頁(yè)面一樣,可以可視化的設(shè)計(jì),也可以編寫(xiě)后置代碼。與普通頁(yè)面不一樣的是,它可以包含ContentPlaceHolder控件,ContentPlaceHolder控件就是可以顯示內(nèi)容頁(yè)面的區(qū)域。
母版頁(yè)僅僅是一個(gè)頁(yè)面模板,單獨(dú)的母版頁(yè)是不能被用戶所訪問(wèn)的。單獨(dú)的內(nèi)容頁(yè)也不能夠使用。母版頁(yè)和內(nèi)容頁(yè)有著嚴(yán)格對(duì)應(yīng)關(guān)系。母版頁(yè)中包含多少個(gè)ContentPlaceHolder控件,那么內(nèi)容頁(yè)中也必須設(shè)置與其相對(duì)應(yīng)的Content控件。當(dāng)客戶端瀏覽器向服務(wù)器發(fā)出請(qǐng)求,要求瀏覽某個(gè)內(nèi)容頁(yè)面時(shí),引擎將同時(shí)執(zhí)行內(nèi)容頁(yè)和母版頁(yè)的代碼,并將最終結(jié)果發(fā)送給客戶端瀏覽器。
母版頁(yè)具有下面的優(yōu)點(diǎn):
- 使用母版頁(yè)可以集中處理頁(yè)的通用功能,以便可以只在一個(gè)位置上進(jìn)行更新。
- 使用母版頁(yè)可以方便地創(chuàng)建一組控件和代碼,并將結(jié)果應(yīng)用于一組頁(yè)。例如,可以在母版頁(yè)上使用控件來(lái)創(chuàng)建一個(gè)應(yīng)用于所有頁(yè)的菜單。
- 通過(guò)允許控制占位符控件的呈現(xiàn)方式,母版頁(yè)使您可以在細(xì)節(jié)上控制最終頁(yè)的布局。
- 母版頁(yè)提供一個(gè)對(duì)象模型,使用該對(duì)象模型可以從各個(gè)內(nèi)容頁(yè)自定義母版頁(yè)。
示例代碼:
<%@ Master Language=”C#” AutoEventWireup=”true” CodeFile=”MasterPage.master.cs” Inherits=”MasterPage” %> …… <form id=”form1″ runat=”server”> <div> <asp:contentplaceholder id=”ContentPlaceHolder1″ runat=”server”> </asp:contentplaceholder> </div> </form> ……
注意:
1、這里的聲明指示符是“<%@ Master…%>”
2、其內(nèi)部包含<asp:contentplaceholder……>控件
內(nèi)容頁(yè)(擴(kuò)展名是.aspx)
在建立內(nèi)容頁(yè)面的時(shí)候,在“添加新項(xiàng)”對(duì)話框中要選中“選擇母版頁(yè)”復(fù)選框。這樣建立的頁(yè)面就是內(nèi)容頁(yè)面,內(nèi)容頁(yè)面在顯示的時(shí)候會(huì)把母版面的內(nèi)容一起以水印淡化的形式顯示出來(lái),而在母版頁(yè)中的ContentPlaceHolder控件區(qū)域會(huì)被內(nèi)容頁(yè)面中的Content控件替換,程序員可以在這里編寫(xiě)內(nèi)容頁(yè)面中的內(nèi)容。
代碼如下:
<%@ Page Language=”C#” MasterPageFile=”~/MasterPage/MP.master” AutoEventWireup=”true” CodeFile=”Show1.aspx.cs” Inherits=”MasterPage_Show1″ Title=”Untitled Page” %> <asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ Runat=”Server”> </asp:Content>
注意:
1、這里的聲明指示符中多了一項(xiàng)MasterPageFile=”~/MasterPage/MP.master”,這一項(xiàng)是在創(chuàng)建內(nèi)容頁(yè)面時(shí)根據(jù)“選擇母版頁(yè)”復(fù)選框的選中情況生成的。它指明了該頁(yè)是內(nèi)容頁(yè)面,也指明了該內(nèi)容頁(yè)面的母版頁(yè)是哪個(gè)頁(yè)面。
2、“<asp:Content ……>”就是要在其中顯示的內(nèi)容。
一、在母版頁(yè)中編寫(xiě)后臺(tái)代碼,訪問(wèn)母版頁(yè)中的控件:
與普通的aspx頁(yè)面一樣,雙擊按鈕即可編寫(xiě)母版頁(yè)中的代碼
二、在內(nèi)空頁(yè)面中編寫(xiě)后臺(tái)代碼,訪問(wèn)內(nèi)容頁(yè)面中的控件:
與普通的aspx頁(yè)面一樣,雙擊按鈕即可編寫(xiě)母版頁(yè)中的代碼
三、在內(nèi)容頁(yè)面中編寫(xiě)代碼訪問(wèn)母版頁(yè)中的控件:
在內(nèi)容頁(yè)面中有個(gè)Master對(duì)象,它是MasterPage類型,它代表當(dāng)前內(nèi)容頁(yè)面的母版頁(yè)。通過(guò)這個(gè)對(duì)象的FindControl方法,我們可以找到母版面中的控件,這樣就可以在內(nèi)容頁(yè)面中操作母版頁(yè)中的控件了。
TextBox txt = (TextBox)((MasterPage)Master).FindControl(“txtMaster”); txt.Text = this.txtContent1.Text; ;
四、在內(nèi)容頁(yè)面中編寫(xiě)代碼訪問(wèn)母版頁(yè)中的屬性和方法:
仍可能通過(guò)Master對(duì)象進(jìn)行訪問(wèn),只不過(guò)在這里要把Master對(duì)象轉(zhuǎn)換成具體的母版頁(yè)類型,然后再調(diào)用母版頁(yè)中的屬性和方不法。
這里要說(shuō)明的是:母版頁(yè)中要被內(nèi)容頁(yè)面調(diào)用的屬性和方法必須是Public修改的。否則無(wú)法調(diào)到。
假設(shè)母版頁(yè)中有下面的屬性和方法:
public string TextValue
{
get
{
return this.txtMaster.Text;
}
set
{
this.txtMaster.Text = value;
}
}
public void show(string str)
{
txtMaster.Text = str;
}
在內(nèi)容頁(yè)面中可以通過(guò)下代的代碼來(lái)實(shí)現(xiàn)對(duì)母版頁(yè)中方法的調(diào)用:
((MasterPage_MP)Master).show(this.txtContent1.Text); ((MasterPage_MP)Master).TextValue = this.txtContent1.Text;
五、在母版頁(yè)中訪問(wèn)內(nèi)容頁(yè)面的控件:
在母版頁(yè)中可以通過(guò)在ContentPlaceHolder控件中調(diào)用FindControl方法來(lái)取得控件,然后對(duì)控件進(jìn)行操作。
六、在母版頁(yè)中訪問(wèn)內(nèi)容頁(yè)面中的方法和屬性:
在母版頁(yè)中調(diào)用子頁(yè)面中的屬性和方法有點(diǎn)難度,因?yàn)槲覀儫o(wú)法像上一步中那樣通過(guò)FindControl來(lái)找到方法和屬性。
于是我們想到在母版面的聲明指示符中加入下面的代碼:
<%@ Reference Page=”~/MasterPage/Show1.aspx” %>
在運(yùn)行的時(shí)候回發(fā)現(xiàn)有錯(cuò)誤,錯(cuò)誤的內(nèi)容是“無(wú)法實(shí)現(xiàn)循環(huán)引用”。這是因?yàn)槟J(rèn)在子頁(yè)面中引用了母版頁(yè),你也就不能再在母版頁(yè)中引用子頁(yè)面了。
我在網(wǎng)上也沒(méi)找到更好的解決方法,但這使我們想起C#是的“反射”,它可以使我們動(dòng)態(tài)獲取頁(yè)面對(duì)象,并且可以調(diào)用它的屬性和方法。
代碼如下:
Type t = this.ContentPlaceHolder1.Page.GetType(); PropertyInfo pi = t.GetProperty(“ContentValue”); //獲取ContentValue屬性 pi.SetValue(this.ContentPlaceHolder1.Page,this.txtMaster.Text,null); //給屬性賦值 MethodInfo mi = t.GetMethod(“SetValue”); //獲取SetValue()方法 object[] os = new object[1]; //建造輸入?yún)?shù) os[0] = txtMaster.Text; mi.Invoke(this.ContentPlaceHolder1.Page, os); //調(diào)用SetValue方法
七、在有多個(gè)內(nèi)容頁(yè)面使用母版面的情況下,在母版頁(yè)中根據(jù)不同的內(nèi)容頁(yè)面實(shí)現(xiàn)不同的操作
在母版頁(yè)中可以加入多個(gè)不同的內(nèi)容頁(yè)面,但在設(shè)計(jì)期間,我們無(wú)法知道當(dāng)前運(yùn)行的是哪個(gè)內(nèi)容頁(yè)面。所以只能通過(guò)分支判斷當(dāng)前運(yùn)行的是哪個(gè)子頁(yè)面,來(lái)執(zhí)行不同的操作。這里也用到了反射的知識(shí)。
代碼如下:
string s = this.ContentPlaceHolder1.Page.GetType().ToString(); //取出內(nèi)容頁(yè)面的類型名稱
if (s == “ASP.default17_aspx”) //根據(jù)不同的內(nèi)容頁(yè)面類型執(zhí)行不同的操作
{
((TextBox)this.ContentPlaceHolder1.FindControl(“TextBox2″)).Text = “MastPage”;
}
else if (s == “ASP.default18_aspx”)
{
((TextBox)this.ContentPlaceHolder1.FindControl(“TextBox2″)).Text = “Hello MastPage”;
}
八、在母版面與內(nèi)容頁(yè)面中JS代碼的操作
在母版頁(yè)或內(nèi)容頁(yè)面中的控件運(yùn)行之后會(huì)自動(dòng)生成ID,如文本框的ID是txtContent1,在運(yùn)行之后ID會(huì)自動(dòng)變?yōu)閏tl00_ContentPlaceHolder2_txtContent1,name屬性會(huì)變?yōu)閏tl00$ContentPlaceHolder2$txtContent1。
在JS代碼中,我們用document.getElementById()方法,根據(jù)id取得控件對(duì)象的時(shí)候,應(yīng)當(dāng)使用ctl00_ContentPlaceHolder2_txtContent1這個(gè)ID名,否則會(huì)產(chǎn)生“未找到對(duì)象”的異常。
母版頁(yè)運(yùn)行機(jī)制
母版頁(yè)僅僅是一個(gè)頁(yè)面模板,單獨(dú)的母版頁(yè)是不能被用戶所訪問(wèn)的。單獨(dú)的內(nèi)容頁(yè)也不能夠使用。母版頁(yè)和內(nèi)容頁(yè)有著嚴(yán)格對(duì)應(yīng)關(guān)系。母版頁(yè)中包含多少個(gè)ContentPlaceHolder控件,那么內(nèi)容頁(yè)中也必須設(shè)置與其相對(duì)應(yīng)的Content控件。當(dāng)客戶端瀏覽器向服務(wù)器發(fā)出請(qǐng)求,要求瀏覽某個(gè)內(nèi)容頁(yè)面時(shí),ASP.NET引擎將同時(shí)執(zhí)行內(nèi)容頁(yè)和母版頁(yè)的代碼,并將最終結(jié)果發(fā)送給客戶端瀏覽器。
母版頁(yè)和內(nèi)容頁(yè)的運(yùn)行過(guò)程可以概括為以下5個(gè)步驟。
(1)用戶通過(guò)鍵入內(nèi)容頁(yè)的URL來(lái)請(qǐng)求某頁(yè)。
(2)獲取內(nèi)容頁(yè)后,讀取@ Page指令。如果該指令引用一個(gè)母版頁(yè),則也讀取該母版頁(yè)。如果是第一次請(qǐng)求這兩個(gè)頁(yè),則兩個(gè)頁(yè)都要進(jìn)行編譯。
(3)母版頁(yè)合并到內(nèi)容頁(yè)的控件樹(shù)中。
(4)各個(gè)Content控件的內(nèi)容合并到母版頁(yè)中相應(yīng)的ContentPlaceHolder控件中。
(5)呈現(xiàn)得到結(jié)果頁(yè)。
母版頁(yè)和內(nèi)容頁(yè)事件順序
(1)母版頁(yè)中控件Init事件;
(2)內(nèi)容頁(yè)中Content控件Init事件;
(3)母版頁(yè)Init事件;
(4)內(nèi)容頁(yè)Init事件;
(5)內(nèi)容頁(yè)Load事件;
(6)母版頁(yè)Load事件;
(7)內(nèi)容頁(yè)中Content控件Load事件;
(8)內(nèi)容頁(yè)P(yáng)reRender事件;
(9)母版頁(yè)P(yáng)reRender事件;
(10)母版頁(yè)控件PreRender事件。
(11)內(nèi)容頁(yè)中Content控件PreRender事件。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解Asp.Net母版頁(yè)元素ID不一致的體現(xiàn)
- Asp.Net套用母版頁(yè)后元素ID不一致(個(gè)人總結(jié))
- 淺談Asp.Net母版頁(yè)和內(nèi)容頁(yè)運(yùn)行機(jī)制
- 在ASP.NET 2.0中操作數(shù)據(jù)之三:創(chuàng)建母版頁(yè)和站點(diǎn)導(dǎo)航
- asp.net母版頁(yè)如何使用
- ASP.NET母版頁(yè)基礎(chǔ)知識(shí)介紹
- ASP.NET中母版頁(yè)和shtml實(shí)例入門(mén)
- ASP.Net巧用窗體母版頁(yè)實(shí)例
- asp.net使用母版頁(yè)中使用ajax腳本取數(shù)據(jù)
- ASP.NET下母版頁(yè)和內(nèi)容頁(yè)中的事件發(fā)生順序整理
- ASP.NET 2.0 中的創(chuàng)建母版頁(yè)
- ASP.NET MVC使用母版頁(yè)視圖
相關(guān)文章
ASP.NET?Core應(yīng)用JWT進(jìn)行用戶認(rèn)證及Token的刷新方案
本文詳細(xì)講解了ASP.NET?Core應(yīng)用JWT進(jìn)行用戶認(rèn)證及Token的刷新方案,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
在Asp.net用C#建立動(dòng)態(tài)Excel
在Asp.net用C#建立動(dòng)態(tài)Excel...2006-09-09
ASP.NET Core 2.0中Razor頁(yè)面禁用防偽令牌驗(yàn)證
在這篇短文中,我將向您介紹如何ASP.NET Core2.0 Razor頁(yè)面中禁用防偽令牌驗(yàn)證,對(duì)此有興趣的朋友參考學(xué)習(xí)下吧。2018-01-01
ASP.NET編程時(shí)遇到GridView的一個(gè)問(wèn)題 激發(fā)了未處理的事件"PageIndexChanging&q
今天在寫(xiě)代碼的時(shí)候遇到一個(gè)很郁悶的問(wèn)題,就是在ASP.NET中通過(guò)編程創(chuàng)建SqlDataSource然后綁定給GridView,在啟用了 GridView自身的分頁(yè)功能之后,點(diǎn)擊分頁(yè)頁(yè)碼會(huì)出現(xiàn)錯(cuò)誤提示:GridView“GridView1”激發(fā)了未處理的事件"PageIndexChanging"……2010-04-04
asp.net代碼中修改web.config節(jié)點(diǎn)的具體方法
在有些情況下,要在代碼中讀取一種全局變量,把這種全局變量放在web.config是一種常見(jiàn)的手段。2013-06-06
在.Net?Framework應(yīng)用中請(qǐng)求HTTP2站點(diǎn)的問(wèn)題解析
隨著各大瀏覽器支持和蘋(píng)果的帶頭效應(yīng),HTTP2的應(yīng)用會(huì)越來(lái)越廣泛,但是規(guī)模龐大的.NET?Framework應(yīng)用卻也不能為了連接HTTP2就升級(jí)到NET?Core平臺(tái)。通過(guò)本文提供的方案,可以最小成本的實(shí)現(xiàn).NET?Framework應(yīng)用成功訪問(wèn)HTTP2站點(diǎn),感興趣的朋友跟隨小編一起看看吧2022-07-07
ASP.NET MVC命名空間時(shí)引起錯(cuò)誤的解決方法
這篇文章主要介紹了解決ASP.NET MVC 重命名(命名空間)而導(dǎo)致錯(cuò)誤的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-11-11
ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤(pán)之查看文件夾實(shí)現(xiàn)代碼
下面要介紹的實(shí)例包括網(wǎng)上硬盤(pán)的許多功能,將一步步為大家進(jìn)行介紹。首先創(chuàng)建工程實(shí)例,然后進(jìn)行主界面的設(shè)計(jì),最后對(duì)各個(gè)功能的實(shí)現(xiàn)分別進(jìn)行介紹2012-10-10
c# 在WebBrowser中用SendMessage模擬鼠標(biāo)點(diǎn)擊
想在WebBrowser控件里面模擬鼠標(biāo)點(diǎn)擊,在百度上找了半天,怎么也找不到,還是google強(qiáng)大,在一個(gè)國(guó)外網(wǎng)站上找到的,代碼比較清楚了,不做說(shuō)明。2010-02-02

