吴金秀
(黄冈职业技术学院,湖北 黄冈 438000)
大多数Web站点都是所有页面采用一种布局,使整个网站具有统一的风格和外观,实现良好的用户体验。ASP.NET自2.0以后的版本中提供了母版页技术,可将站点的整体布局在母版中进行规划与实现,将每个页面的公共部分,如网站的logo、banner、版权声明等内容设计到母版页中,再基于母版页创建不同的内容页,以实现Web站点的一致布局与风格。
运用母版页技术的页面由两个部分组成:母版页和内容页。
母版页的文件后缀名为.master,它主要是对整个站点的整体布局进行规划与设计,包含整个站点的公共部分。内容页的文件类型为.aspx,它设计页面的不同内容。当用户请求内容页时,这些内容页与母版页合并后将母版页的布局与内容页的内容组合在一起输出。
母版页技术能很好地实现界面设计的模块化,降低开发人员的工作强度,其优势主要包括:
(1)实现了代码的重用,即同一个母版页可用于同一站点的不同页面;
(2)有利于实现页面布局,提供一种便于利用的对象模型;
(3)有利于站点修改和维护,如果母版页更新了,所有的网页都会随之更新。
母版页的设计与普通页面的设计一样。它的“源”文件中除包含一个完整页面文件的基本元素之外,还包含一个或几个ContentPlaceHolder控件,Content PlaceHolder控件是为内容页预留的,这样母版页的设计就是对整个站点的统一规划与设计。它相当于页面的模板,方便用户的规划与设计,但不能独立运行。
图1 母版页的工作原理
内容页的设计在可视化的界面中,母版页以水印淡化的形式显示出来,在内容页中母版页的内容是不可编辑的。内容页的设计在Content控件中进行,Contnet控件就是与之相对应的母版页的Content Place Holder控件。如图1所示,母版页文件 A.master中有两个占位符,id分别是“Main”和“Footer”,内容A.aspx文件中有两个Content控件,Content Place Holder Id 分别为“Main”和“Footer”,分别替换母版页中id为“Main”和“Footer”的占位符。当客户端浏览器向服务器发出请求,ASP.NET引擎将同时执行内容页和母版页的代码,并将最终结果发送到客户端浏览器。
(1)通过内容页Page对象有一个公共属性Master。
内容页Page对象的属性Master能够实现对相关母版页基类Master Page的引用,由此可以用Master Page实现对母版页各个子对象的访问,Master Page的Find Control方法找到母版页中的控件的引用,并返回相应Object类型的对象。例如,母版页有个Label1控件,在内容页中将Label1中的内容显示在内容页的TextBox1控件中,方法为:
Text Box1.Text= ((Label)((Master Page)Master).Find Control("Label1")).Text;
(2)通过Master Type指令创建与内容页相关的母版页的强类型引用。
在使用该指令时,通过设置Virtual Paht属性指定一个与内容页相关的母版页的存储地址。当该内容页创建自己的Master属性时,属性的值被设置为引用的母版页的存储地址。例如,在母版页中加一个id为Label1的标签,并在后台代码中定义具有公共属性的Label,方法为:
在内容页面中的“源”文件头@page后添加Master Type指令<%@Master Type Virtual Path="~/Master Page1.master"%>,在内容页中可以通过Master对象的Master Label属性来引用母版页中的Label1控件。如设置母版页中的Label1的文本为当前时间,代码为:
Master.Master Label.Text= System.Date Time.Now.To String();
在母版页中可以通过在Content Place Holder控件中调用Find Control方法来取得控件,然后对控件进行操作。如将母版页中Label1中的文本赋值给内容页的Text Box1控件。
((Text Box)(this.Content Place Holder1.Find-Control("Text Box1"))).Text=Label1.Text;
本文从母版页运行的原理以及母版与内容页面通信的角度,总结了母版页技术的应用方法,解决了母版页使用繁琐的问题。以编程方式来动态设置母版页,使得在Web站点设计中,为用户提供一个统一的用户界面与风格样式,并确保内容页和所设置的母版页完全兼容。
[1]神龙工作室.新编ASP.NET 2.0网络编程入门与提高[M].北京:人民邮电出版社,2008.
[2]达内科技.asp.net母版和内容页执行顺序[EB/OL].[2011-09-3].http://www.tarenasz.com/tech/net/722.html.
[3]MSDN.msdn技术资源库·ASP.NET母版页概述[EB/OL].[2012-03-23].http://msdn.microsoft.com/zh-cn/library/wtxbf3hh(v=vs.80).