
使用母版页(MasterPag).ppt
12页第9章 使用母版页(Master Page)•母版页是一个网站统一界面的基础,我们在浏览页面的时候经常看到,有些网站的所有顶端和底端内容都是相同的实现这种相同有很多种方法,最笨的一种方法是每个网页都进行同样的设计,最简单的方法就是使用母版页本章就介绍如何在ASP.NET程序中应用母版页•【本章示例参考:\源代码\C09】9.1 母版页基础•在使用ASP的时候,要想让整个网站页眉页脚等格式统一,一般使用frameset来解决它可以将页面分成3个框架,最上面和最下面的框架保持不变,只允许更改中间的内容框架那时框架的内容以及部署都需要手工完成而在ASP.NET中新添加了Master Page页面,专门用于统一界面框架本节介绍Master Page的使用9.1.1 建立一个母版页•本节首先学习创建一个母版页,然后再了解母版页的组成创建母版页的步骤如下•(1)右击当前项目名称,单击“添加新项”菜单命令,打开“添加新项”对话框•(2)选择“母版页”模板,系统将自动命名为“MasterPage.master”,这里不需要修改名字•注意:母版页文件的扩展名为“.master”•(3)单击“添加”按钮,在解决方案资源管理器中生成了一个母版页文件。
•(4)双击“MasterPage.master”文件,在页面的“设计”视图的整个文件中,只有两个ContentPlaceHolder服务器控件,这是允许改变的内容部分,一个在页面的head中,一个在页面的body中而其他固定部分,在此控件以外的地方添加•(5)在此文件中加个HTML表格,设置为3行2列•(6)将“ContentPlaceHolder1”控件拖到第2行第2列中•(7)在第1行中显示欢迎信息,主要是为了在母版页中显示固定的内容最终页面的设计都是一些隐藏的网格线,并没有非常特殊的设计,如图9.1所示下面给出母版页的源代码9.1.2 建立一个内容页(Content Page)•上一节创建好了母版页,本节将在一个内容页中,应用这个母版,让读者看看ASP.NET程序下的母版页是什么样子•(1)右击当前项目名称,单击“添加新项”菜单命令,打开“添加新项”对话框•(2)此时,选中对话框右下角的“选择母版页”复选框然后选择“Web窗体”项,将这个窗体命名为ContentP.aspx,单击“添加”按钮,此时打开一个对话框,让用户选择要应用哪个母版页•(3)因为本例只创建了一个MasterPage.master母版,所以选择这个文件,然后单击“确定”按钮,此时生成的页面源代码如下所示。
•<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ContentP.aspx.cs" Inherits="ContentP" Title="Untitled Page" %>••(3)在网站根目录下添加一个新文件夹“Content”,将上节的ContentP.aspx页面拖到这个文件夹内。
主要目的是让母版页和内容页不在同个目录下因为实际项目都很大,不同的内容都会分类在不同的目录下•(4)此时设置ContentP.aspx为起始页,运行后发现图像根本没有显示这就是经常遇到的母版页路径问题•凡是在母版页遇到文件路径时,如图像的文件来源、链接的文件去向等,都需要使用绝对路径,或者使用ResolveUrl方法实现相对路径本例将img的属性修改为如下所示••此时再运行程序,图像就可以正常显示了,如图9.3所示9.1.4 在配置文件中设定母版页•如果要修改现在的网站,让每个网页都能应用母版页,那么不需要修改每个网页的属性,只需要在web.config文件中进行配置就可以,主要配置细节如下所示•
•注意:即使设置了web.config中全部网页都应用母版页,但用户可以通过修改网页的MasterPageFile属性来更改母版页9.2 对母版页类进行操作•上一节介绍的这些都是一些可视化的操作,如果要在后台进行母版页的操作,就必须使用母版页类本节就介绍母版页类的一些操作9.2.1 修改标题•当一个内容页应用了母版页后,它的页面源代码中就少了“title”这一项,本节就学习没有了这个标题项,如何修改网页的标题•打开内容页ContentP.aspx,其头文件如下所示其中所有的属性就是针对当前页面的一些配置,在任意属性后面,按“Space”键,就可以出现所能选择的属性,可以看到有“Title”项,选中此项,并将其属性设置为“我是内容”•<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ContentP.aspx.cs" Inherits="ContentP" Title="Untitled Page" %>•好了,运行内容页,再看看内容的标题,如图9.4所示。
9.2.2 访问母版页中的控件•在.NET中,由于是先加载内容页,然后再加载母版页所以不能用常规的方法在内容页中直接访问母版页的属性和方法母版页类提供了“Master.FindControl()”方法类帮助开发人员从内容页调用母版页的数据•现在在母版页中添加一个Label控件,然后在内容页的“Page_Load”中修改这个控件的显示文本,代码如下所示• protected void Page_Load(object sender, EventArgs e)• {• (Master.FindControl("Label1") as Label).Text = "这是内容页的修改";• }•运行内容页,看看母版页中的Label显示文本是否已经修改9.2.3 使用方法与处理事件•为了让内容页可以访问母版页的成员,Page类公开了Master属性如果想在某个内容页访问到其母版页的属性和方法,只需要在内容页的源代码中增加下面的代码:•<%@ MasterType virtualPath="~/MasterPage.master"%>•其中的MasterType指令就是创建对此母版页的强类型引用,而virtualPath则指明了需要强类型引用的母版页文件名。
经过上面的设定后,即可以在内容页中调用母版页的公用属性及方法,如以下代码所示•this.Label1.Text = this.Master.loginName;•this.Label2.Text = this.Master.GetLoginTime();•上面例子中的loginName和GetLoginTime就是母版页中提供的公有属性和方法下面就通过一个实例来学习如何访问母版页的公有属性9.3 关于母版页嵌套(Nesting)•母版页嵌套,就是让一个母版页可以引用另外母版页利用嵌套的母版页我们可以创建组件化的母版页如很多网站包含一个用于定义站点外观的总体外观,这个外观就可以通过母版页来完成而且,不同的功能里又可以定义各自的子母版页,这些子母版页引用了网站的总母版页,并相应定义当前主体内容的外观•在旧版本的VS中,并不提供第2个母版页的设计时支持,但VS2008可以打开本章的案例,在网站下再添加一个新的母版页,命名为“MasterPage2.master”在添加时,选中“选择母版页”复选框,然后把MasterPage.master作为本页的母版页在MasterPage2.master的第2个Content控件内输入“我是第2个母版”,用以在页面显示时进行区别。
•然后在网站中添加一个Web窗体Default2.aspx,此窗体应用MasterPage2.master作为母版,读者可运行Default2.aspx,测试嵌套母版页的运行效果9.4 小结•本章学习了什么是母版页?如何应用母版页?如何引用母版页,这些在日常的网站生活中经常用到,所以本章都通过一个个小的例子说明了这些知识点通过本章的介绍,读者应该掌握母版页的创建和内容页对母版页的引用在学习母版页的同时,掌握网站中网页之间层次的嵌套和相互之间的数据调用。
