亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談Asp.Net母版頁的相關(guān)知識

 更新時(shí)間:2018年11月05日 15:55:38   作者:森大科技  
母版頁的使用與普通頁面類似,可以在其中放置文件或者圖形、任何的HTML控件和Web控件,后置代碼等,這篇文章主要介紹了淺談Asp.Net母版頁的相關(guān)知識,感興趣的小伙伴們可以參考一下

Asp.Net母版頁的相關(guān)知識

母版頁的使用與普通頁面類似,可以在其中放置文件或者圖形、任何的HTML控件和Web控件,后置代碼等。母版頁的擴(kuò)展名以.master結(jié)尾,不能被瀏覽器直接查看。母版頁必須在被其他頁面使用后才能進(jìn)行顯示。

它的使用跟普通的頁面一樣,可以可視化的設(shè)計(jì),也可以編寫后置代碼。與普通頁面不一樣的是,它可以包含ContentPlaceHolder控件,ContentPlaceHolder控件就是可以顯示內(nèi)容頁面的區(qū)域。

母版頁僅僅是一個(gè)頁面模板,單獨(dú)的母版頁是不能被用戶所訪問的。單獨(dú)的內(nèi)容頁也不能夠使用。母版頁和內(nèi)容頁有著嚴(yán)格對應(yīng)關(guān)系。母版頁中包含多少個(gè)ContentPlaceHolder控件,那么內(nèi)容頁中也必須設(shè)置與其相對應(yīng)的Content控件。當(dāng)客戶端瀏覽器向服務(wù)器發(fā)出請求,要求瀏覽某個(gè)內(nèi)容頁面時(shí),引擎將同時(shí)執(zhí)行內(nèi)容頁和母版頁的代碼,并將最終結(jié)果發(fā)送給客戶端瀏覽器。

母版頁具有下面的優(yōu)點(diǎn):

  • 使用母版頁可以集中處理頁的通用功能,以便可以只在一個(gè)位置上進(jìn)行更新。
  • 使用母版頁可以方便地創(chuàng)建一組控件和代碼,并將結(jié)果應(yīng)用于一組頁。例如,可以在母版頁上使用控件來創(chuàng)建一個(gè)應(yīng)用于所有頁的菜單。
  • 通過允許控制占位符控件的呈現(xiàn)方式,母版頁使您可以在細(xì)節(jié)上控制最終頁的布局。
  • 母版頁提供一個(gè)對象模型,使用該對象模型可以從各個(gè)內(nèi)容頁自定義母版頁。

示例代碼:

<%@ 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)容頁(擴(kuò)展名是.aspx)

在建立內(nèi)容頁面的時(shí)候,在“添加新項(xiàng)”對話框中要選中“選擇母版頁”復(fù)選框。這樣建立的頁面就是內(nèi)容頁面,內(nèi)容頁面在顯示的時(shí)候會把母版面的內(nèi)容一起以水印淡化的形式顯示出來,而在母版頁中的ContentPlaceHolder控件區(qū)域會被內(nèi)容頁面中的Content控件替換,程序員可以在這里編寫內(nèi)容頁面中的內(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)容頁面時(shí)根據(jù)“選擇母版頁”復(fù)選框的選中情況生成的。它指明了該頁是內(nèi)容頁面,也指明了該內(nèi)容頁面的母版頁是哪個(gè)頁面。

2、“<asp:Content ……>”就是要在其中顯示的內(nèi)容。

一、在母版頁中編寫后臺代碼,訪問母版頁中的控件:

與普通的aspx頁面一樣,雙擊按鈕即可編寫母版頁中的代碼

二、在內(nèi)空頁面中編寫后臺代碼,訪問內(nèi)容頁面中的控件:

與普通的aspx頁面一樣,雙擊按鈕即可編寫母版頁中的代碼

三、在內(nèi)容頁面中編寫代碼訪問母版頁中的控件:

在內(nèi)容頁面中有個(gè)Master對象,它是MasterPage類型,它代表當(dāng)前內(nèi)容頁面的母版頁。通過這個(gè)對象的FindControl方法,我們可以找到母版面中的控件,這樣就可以在內(nèi)容頁面中操作母版頁中的控件了。

TextBox txt = (TextBox)((MasterPage)Master).FindControl(“txtMaster”);
txt.Text = this.txtContent1.Text; ;

四、在內(nèi)容頁面中編寫代碼訪問母版頁中的屬性和方法:

仍可能通過Master對象進(jìn)行訪問,只不過在這里要把Master對象轉(zhuǎn)換成具體的母版頁類型,然后再調(diào)用母版頁中的屬性和方不法。

這里要說明的是:母版頁中要被內(nèi)容頁面調(diào)用的屬性和方法必須是Public修改的。否則無法調(diào)到。

假設(shè)母版頁中有下面的屬性和方法:

public string TextValue 

   {

get

{

return this.txtMaster.Text;

}

set

{

this.txtMaster.Text = value;

}

}

public void show(string str) 

   {

txtMaster.Text = str;

}

在內(nèi)容頁面中可以通過下代的代碼來實(shí)現(xiàn)對母版頁中方法的調(diào)用:

((MasterPage_MP)Master).show(this.txtContent1.Text);

((MasterPage_MP)Master).TextValue = this.txtContent1.Text;

五、在母版頁中訪問內(nèi)容頁面的控件:

在母版頁中可以通過在ContentPlaceHolder控件中調(diào)用FindControl方法來取得控件,然后對控件進(jìn)行操作。

復(fù)制代碼 代碼如下:
((TextBox)this.ContentPlaceHolder1.FindControl(“txtContent1″)).Text = this.txtMaster.Text;

六、在母版頁中訪問內(nèi)容頁面中的方法和屬性:

在母版頁中調(diào)用子頁面中的屬性和方法有點(diǎn)難度,因?yàn)槲覀儫o法像上一步中那樣通過FindControl來找到方法和屬性。

于是我們想到在母版面的聲明指示符中加入下面的代碼:

<%@ Reference Page=”~/MasterPage/Show1.aspx” %>

在運(yùn)行的時(shí)候回發(fā)現(xiàn)有錯(cuò)誤,錯(cuò)誤的內(nèi)容是“無法實(shí)現(xiàn)循環(huán)引用”。這是因?yàn)槟J(rèn)在子頁面中引用了母版頁,你也就不能再在母版頁中引用子頁面了。

我在網(wǎng)上也沒找到更好的解決方法,但這使我們想起C#是的“反射”,它可以使我們動態(tài)獲取頁面對象,并且可以調(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)容頁面使用母版面的情況下,在母版頁中根據(jù)不同的內(nèi)容頁面實(shí)現(xiàn)不同的操作

在母版頁中可以加入多個(gè)不同的內(nèi)容頁面,但在設(shè)計(jì)期間,我們無法知道當(dāng)前運(yùn)行的是哪個(gè)內(nèi)容頁面。所以只能通過分支判斷當(dāng)前運(yùn)行的是哪個(gè)子頁面,來執(zhí)行不同的操作。這里也用到了反射的知識。

代碼如下:

string s = this.ContentPlaceHolder1.Page.GetType().ToString(); //取出內(nèi)容頁面的類型名稱

if (s == “ASP.default17_aspx”) //根據(jù)不同的內(nèi)容頁面類型執(zhí)行不同的操作

{

((TextBox)this.ContentPlaceHolder1.FindControl(“TextBox2″)).Text = “MastPage”;

}

else if (s == “ASP.default18_aspx”)

{

((TextBox)this.ContentPlaceHolder1.FindControl(“TextBox2″)).Text = “Hello MastPage”;

}

八、在母版面與內(nèi)容頁面中JS代碼的操作

在母版頁或內(nèi)容頁面中的控件運(yùn)行之后會自動生成ID,如文本框的ID是txtContent1,在運(yùn)行之后ID會自動變?yōu)閏tl00_ContentPlaceHolder2_txtContent1,name屬性會變?yōu)閏tl00$ContentPlaceHolder2$txtContent1。

在JS代碼中,我們用document.getElementById()方法,根據(jù)id取得控件對象的時(shí)候,應(yīng)當(dāng)使用ctl00_ContentPlaceHolder2_txtContent1這個(gè)ID名,否則會產(chǎn)生“未找到對象”的異常。

母版頁運(yùn)行機(jī)制

母版頁僅僅是一個(gè)頁面模板,單獨(dú)的母版頁是不能被用戶所訪問的。單獨(dú)的內(nèi)容頁也不能夠使用。母版頁和內(nèi)容頁有著嚴(yán)格對應(yīng)關(guān)系。母版頁中包含多少個(gè)ContentPlaceHolder控件,那么內(nèi)容頁中也必須設(shè)置與其相對應(yīng)的Content控件。當(dāng)客戶端瀏覽器向服務(wù)器發(fā)出請求,要求瀏覽某個(gè)內(nèi)容頁面時(shí),ASP.NET引擎將同時(shí)執(zhí)行內(nèi)容頁和母版頁的代碼,并將最終結(jié)果發(fā)送給客戶端瀏覽器。

母版頁和內(nèi)容頁的運(yùn)行過程可以概括為以下5個(gè)步驟。

(1)用戶通過鍵入內(nèi)容頁的URL來請求某頁。

(2)獲取內(nèi)容頁后,讀取@ Page指令。如果該指令引用一個(gè)母版頁,則也讀取該母版頁。如果是第一次請求這兩個(gè)頁,則兩個(gè)頁都要進(jìn)行編譯。

(3)母版頁合并到內(nèi)容頁的控件樹中。

(4)各個(gè)Content控件的內(nèi)容合并到母版頁中相應(yīng)的ContentPlaceHolder控件中。

(5)呈現(xiàn)得到結(jié)果頁。

母版頁和內(nèi)容頁事件順序

(1)母版頁中控件Init事件;

(2)內(nèi)容頁中Content控件Init事件;

(3)母版頁Init事件;

(4)內(nèi)容頁Init事件;

(5)內(nèi)容頁Load事件;

(6)母版頁Load事件;

(7)內(nèi)容頁中Content控件Load事件;

(8)內(nèi)容頁P(yáng)reRender事件;

(9)母版頁P(yáng)reRender事件;

(10)母版頁控件PreRender事件。

(11)內(nèi)容頁中Content控件PreRender事件。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論