吳金秀
(黃岡職業(yè)技術(shù)學(xué)院,湖北 黃岡 438000)
大多數(shù)Web站點(diǎn)都是所有頁(yè)面采用一種布局,使整個(gè)網(wǎng)站具有統(tǒng)一的風(fēng)格和外觀,實(shí)現(xiàn)良好的用戶體驗(yàn)。ASP.NET自2.0以后的版本中提供了母版頁(yè)技術(shù),可將站點(diǎn)的整體布局在母版中進(jìn)行規(guī)劃與實(shí)現(xiàn),將每個(gè)頁(yè)面的公共部分,如網(wǎng)站的logo、banner、版權(quán)聲明等內(nèi)容設(shè)計(jì)到母版頁(yè)中,再基于母版頁(yè)創(chuàng)建不同的內(nèi)容頁(yè),以實(shí)現(xiàn)Web站點(diǎn)的一致布局與風(fēng)格。
運(yùn)用母版頁(yè)技術(shù)的頁(yè)面由兩個(gè)部分組成:母版頁(yè)和內(nèi)容頁(yè)。
母版頁(yè)的文件后綴名為.master,它主要是對(duì)整個(gè)站點(diǎn)的整體布局進(jìn)行規(guī)劃與設(shè)計(jì),包含整個(gè)站點(diǎn)的公共部分。內(nèi)容頁(yè)的文件類型為.a(chǎn)spx,它設(shè)計(jì)頁(yè)面的不同內(nèi)容。當(dāng)用戶請(qǐng)求內(nèi)容頁(yè)時(shí),這些內(nèi)容頁(yè)與母版頁(yè)合并后將母版頁(yè)的布局與內(nèi)容頁(yè)的內(nèi)容組合在一起輸出。
母版頁(yè)技術(shù)能很好地實(shí)現(xiàn)界面設(shè)計(jì)的模塊化,降低開發(fā)人員的工作強(qiáng)度,其優(yōu)勢(shì)主要包括:
(1)實(shí)現(xiàn)了代碼的重用,即同一個(gè)母版頁(yè)可用于同一站點(diǎn)的不同頁(yè)面;
(2)有利于實(shí)現(xiàn)頁(yè)面布局,提供一種便于利用的對(duì)象模型;
(3)有利于站點(diǎn)修改和維護(hù),如果母版頁(yè)更新了,所有的網(wǎng)頁(yè)都會(huì)隨之更新。
母版頁(yè)的設(shè)計(jì)與普通頁(yè)面的設(shè)計(jì)一樣。它的“源”文件中除包含一個(gè)完整頁(yè)面文件的基本元素之外,還包含一個(gè)或幾個(gè)ContentPlaceHolder控件,Content PlaceHolder控件是為內(nèi)容頁(yè)預(yù)留的,這樣母版頁(yè)的設(shè)計(jì)就是對(duì)整個(gè)站點(diǎn)的統(tǒng)一規(guī)劃與設(shè)計(jì)。它相當(dāng)于頁(yè)面的模板,方便用戶的規(guī)劃與設(shè)計(jì),但不能獨(dú)立運(yùn)行。
圖1 母版頁(yè)的工作原理
內(nèi)容頁(yè)的設(shè)計(jì)在可視化的界面中,母版頁(yè)以水印淡化的形式顯示出來(lái),在內(nèi)容頁(yè)中母版頁(yè)的內(nèi)容是不可編輯的。內(nèi)容頁(yè)的設(shè)計(jì)在Content控件中進(jìn)行,Contnet控件就是與之相對(duì)應(yīng)的母版頁(yè)的Content Place Holder控件。如圖1所示,母版頁(yè)文件 A.master中有兩個(gè)占位符,id分別是“Main”和“Footer”,內(nèi)容A.a(chǎn)spx文件中有兩個(gè)Content控件,Content Place Holder Id 分別為“Main”和“Footer”,分別替換母版頁(yè)中id為“Main”和“Footer”的占位符。當(dāng)客戶端瀏覽器向服務(wù)器發(fā)出請(qǐng)求,ASP.NET引擎將同時(shí)執(zhí)行內(nèi)容頁(yè)和母版頁(yè)的代碼,并將最終結(jié)果發(fā)送到客戶端瀏覽器。
(1)通過(guò)內(nèi)容頁(yè)P(yáng)age對(duì)象有一個(gè)公共屬性Master。
內(nèi)容頁(yè)P(yáng)age對(duì)象的屬性Master能夠?qū)崿F(xiàn)對(duì)相關(guān)母版頁(yè)基類Master Page的引用,由此可以用Master Page實(shí)現(xiàn)對(duì)母版頁(yè)各個(gè)子對(duì)象的訪問(wèn),Master Page的Find Control方法找到母版頁(yè)中的控件的引用,并返回相應(yīng)Object類型的對(duì)象。例如,母版頁(yè)有個(gè)Label1控件,在內(nèi)容頁(yè)中將Label1中的內(nèi)容顯示在內(nèi)容頁(yè)的TextBox1控件中,方法為:
Text Box1.Text= ((Label)((Master Page)Master).Find Control("Label1")).Text;
(2)通過(guò)Master Type指令創(chuàng)建與內(nèi)容頁(yè)相關(guān)的母版頁(yè)的強(qiáng)類型引用。
在使用該指令時(shí),通過(guò)設(shè)置Virtual Paht屬性指定一個(gè)與內(nèi)容頁(yè)相關(guān)的母版頁(yè)的存儲(chǔ)地址。當(dāng)該內(nèi)容頁(yè)創(chuàng)建自己的Master屬性時(shí),屬性的值被設(shè)置為引用的母版頁(yè)的存儲(chǔ)地址。例如,在母版頁(yè)中加一個(gè)id為L(zhǎng)abel1的標(biāo)簽,并在后臺(tái)代碼中定義具有公共屬性的Label,方法為:
在內(nèi)容頁(yè)面中的“源”文件頭@page后添加Master Type指令<%@Master Type Virtual Path="~/Master Page1.master"%>,在內(nèi)容頁(yè)中可以通過(guò)Master對(duì)象的Master Label屬性來(lái)引用母版頁(yè)中的Label1控件。如設(shè)置母版頁(yè)中的Label1的文本為當(dāng)前時(shí)間,代碼為:
Master.Master Label.Text= System.Date Time.Now.To String();
在母版頁(yè)中可以通過(guò)在Content Place Holder控件中調(diào)用Find Control方法來(lái)取得控件,然后對(duì)控件進(jìn)行操作。如將母版頁(yè)中Label1中的文本賦值給內(nèi)容頁(yè)的Text Box1控件。
((Text Box)(this.Content Place Holder1.Find-Control("Text Box1"))).Text=Label1.Text;
本文從母版頁(yè)運(yùn)行的原理以及母版與內(nèi)容頁(yè)面通信的角度,總結(jié)了母版頁(yè)技術(shù)的應(yīng)用方法,解決了母版頁(yè)使用繁瑣的問(wèn)題。以編程方式來(lái)動(dòng)態(tài)設(shè)置母版頁(yè),使得在Web站點(diǎn)設(shè)計(jì)中,為用戶提供一個(gè)統(tǒng)一的用戶界面與風(fēng)格樣式,并確保內(nèi)容頁(yè)和所設(shè)置的母版頁(yè)完全兼容。
[1]神龍工作室.新編ASP.NET 2.0網(wǎng)絡(luò)編程入門與提高[M].北京:人民郵電出版社,2008.
[2]達(dá)內(nèi)科技.a(chǎn)sp.net母版和內(nèi)容頁(yè)執(zhí)行順序[EB/OL].[2011-09-3].http://www.tarenasz.com/tech/net/722.html.
[3]MSDN.msdn技術(shù)資源庫(kù)·ASP.NET母版頁(yè)概述[EB/OL].[2012-03-23].http://msdn.microsoft.com/zh-cn/library/wtxbf3hh(v=vs.80).