ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:445.63KB ,
资源ID:7581939      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7581939.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第七章使用母版页设计网站.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第七章使用母版页设计网站.docx

1、第七章 使用母版页设计网站第七章 使用母版页设计网站自引入Internet以来,使网站有统一的外观和操作方式是开发人员一直试图解决的一个问题。大多数网站都有标题、脚标和菜单结构,但它们对放置其中的各个项目的处理方式不同。多年来,产生了几个不同的技术来解决这个问题,例如服务器端的include文件、层叠样式表(CSS)、定制模板文件、XML和XSLT,以及最近的ASP.NET用户控件等。这些技术都有其优缺点,但没有一种技术提供了使网站保持一致的解决方案。在ASP.NET 1.1中,用户控件(和CSS)提供了使网站布局保持一致的最佳方案,因为它们是面向对象的,可以定义一个或多个页面上的通用标题、脚

2、标和菜单。但是,大多数开发人员都要在每个页面上使用Reference指令以及相关的TagPrefix和TagName属性,来引用用户控件,导致代码的重复。为了解决这些重复代码的问题,一些开发人员尝试把用户控件嵌入其他用户控件中。这个方式的确有效,但在加载或回送操作中需要编程访问控件时,嵌套的对象模型很难使用。ASP.NET 2.0可以为网站提供统一的布局和结构。该方式不是采用嵌套的用户控件、定制类和模板,而是使用ASP.NET 2.0的 母版页(母版页)定义网站的整体布局,且所花的时间和精力非常少。它们可以在一个地方定义,在整个网站上共享,且不需要把标题、脚标和菜单用户控件硬编码到每个页面上。

3、本章将介绍母版页,描述可以在ASP.NET 2.0网站上使用的各种技巧。前两节概述母版页的创建和使用,其后的章节深入探讨母版页的用法。7.1母版页基础母版页提供了一种简单而高效的模板框架,它允许在一个模板文件中定义网站的公共组件,例如菜单、标题和脚标。这将快速而轻松地修改网站的整体外观、操作方式和布局,因为对母版页模板的修改会自动应用于整个网站。许多网站都只需要一个母版页,但也可以根据需要创建多个母版页 一个用于主页、一个用于子页面。母版页也可以根据用户的配置或其他条件动态加载。因此很容易提供页面的可打印版本,而无需修改页面的内容。所有的母版页都有.master扩展名,它映射到处理程序Syst

4、em.Web.HttpForbidden Handler上。这个映射在Web服务器的默认web.config文件中定义,可以防止母版页直接在浏览器中打开,就好像带.ascx和.config扩展名的文件不能用浏览器查看一样。试图在浏览器中查看扩展名为.master的文件,会导致一个“这类页面不能打开”错误。母版页依赖.NET Framework中的已有类来执行其逻辑。它们直接派生自UserControl类:public class MasterPage : System.Web.UI.UserControl派生自UserControl的结果是,母版页有一组标准的属性,例如Page、Session

5、、Request和Response,它们可以以编程方式访问。母版页不能直接在Internet Information Services (IIS)应用程序(如用户控件)之间共享,否则会生成一个错误。本章的后面将学习解决这个问题的一种方式,让母版页可以在服务器的多个IIS应用程序之间共享。7.1.1 创建母版页在Visual Studio .NET 2005中,使用“添加新项”菜单就可以创建母版页,也可以在自己喜欢的文本编辑器中手动创建母版页。简单的母版页(MasterDemo.master)如示例7-1(MasterDem.master)所示。例7-1 简单的母版页 母版页示例 Copyrig

6、ht (C)金石科技 2009-2012, All Rights Reserved 京ICP证666666号 代码分析:示例7-1中的代码定义了标准标题、菜单和脚标在页面整个结构中的位置,还使用ContentPlaceHolder服务器控件定义了页面内容在母版页中的位置。ContentPlaceHolder派生自Control,它并不添加自己的属性、方法或事件。其唯一作用是标记页面内容在母版页模板中的位置。这里的母版页只有一个ContentPlaceHolder控件,但如果页面的内容应该位于不同的区域(例如左列和右列),就可以添加多个ContentPlaceHolder控件。添加多个Conte

7、ntPlaceHolder控件时,需要确保每个控件都有唯一的ID。提示:在母版页中定义的图像或其他资源的路径与使用母版页显示的实际页面相关,该路径与母版页本身的位置没有关系。例如,如果一个页面位于网站的根目录下,且存在一个Images子文件夹,则使用Images/ImageName.gif定义母版页中的图像就是正确的,因为Images子文件夹位于该页面的下一级。对于不位于网站根目录的页面,该路径不起作用,最终会导致图像在浏览器中由于找不到源文件而不显示。应该把母版页的路径定义为当前网站根目录中的图像、样式表、JavaScript文件等。示例7-1中的母版页包含一个img标记,其src属性以/W

8、ebBook开头,所以图像路径从网站的根目录开始定义。这类路径可以处理嵌套在任一级的页面。对于ASP.NET服务器控件,如Image控件,可使用字符表示图像路径从网站的根目录开始:母版页可以有相关的代码文件,以使HTML代码和编程代码清晰地分隔开来,就像ASP.NET Web窗体和用户控件那样。示例7-1中的母版页示例与一个C#类WebsiteMasterPage关联起来,该类位于WebsiteMasterPage.master.cs文件中。标准事件处理程序,如Page_Load、Page_PreRender等都可以包含进来,以便在运行期间动态修改母版页的内容。7.1.2 创建内容页面前面介绍

9、了母版页的一些基础知识,现在该讨论ASP.NET页面如何使用母版页了。引用母版页的页面称为内容页面。内容页面与一般的ASP.NET页面在几个方面有所区别。第一,一般的ASP.NET页面表示一个完整的页面,包括HTML、body和form标记,而内容页面不包含这些标记,因为它们一般是在母版页中定义的(内容页面可能有form标记,也可能没有)。第二,内容页面必须包含一个Content服务器控件,而一般的ASP.NET页面不包含这个控件。最后,一般的ASP.NET页面不使用母版页,而内容页面依赖母版页控制页面的整体结构和布局。尽管这两种页面有许多不同之处,但它们都使用.aspx文件扩展名。要在内容页

10、面中引用母版页,可以使用Page指令的MasterPageFile属性。MasterPageFile属性中定义的路径应以Web应用程序的根目录开始,这样,如果页面移动到网站文件夹结构的另一级上,它仍包含指向母版页的正确路径。字符可以用于确保路径从网站的根目录开始。除了引用母版页的文件位置之外,内容页面还需要包含一个Content服务器控件,它包含页面的实际内容。Content控件继承自Control类,并添加了ContentPlaceHolderID属性。ContentPlaceHolderID用于标识母版页上的ContentPlaceHolder控件,在该控件上将放置页面的内容。一个简单的内

11、容页面如示例7-2所示,该内容页面使用了MasterPageFile属性和Content服务器控件:练习7-2 使用MasterPageFile属性和Content服务器控件的简单的内容页面注意,内容页面不包含任何HTML或body标记,因为这些标记都是在母版页文件WebsiteMasterPage.master中定义的。在这个例子中,form标记也在母版页中定义。页面的内容放在Content服务器控件中,该控件的ContentPlaceHolderID值对应于母版页中的ContentPlaceHolder ID值。如果Content控件的ContentPlaceHolderID值不匹配母版页

12、中的ContentPlaceHolder控件的ID值,就会产生一个错误,因为ASP.NET运行库不知道应把页面的内容放在母版页的控件集合的什么地方。内容页面的所有内容都必须放在一个或多个Content服务器控件中,所以一般看不到Title标记,也没有要放在该标记中的head标记。Page指令包含一个Title属性,它可以用于设置内容页面的标题,否则内容页面会使用母生版页的标题作为自己的标题。标题也可以通过编程方式进行修改,如下一节所述。图7-1显示了在Visual Studio .NET 2005中,内容页面在设计期间的情形。注意,内容页面自动与母版页合并在一起,提供了整个页面在设计期间的视图

13、。内容页面显示在图形中间的白色区域,可以在设计视图中直接编辑。母版页是灰色的,不能编辑。图7- 1 母版的设计视图当然可以手动创建内容页面,但Visual Studio .NET还能更方便地创建它们,具体方法是:在网站上添加一个新项,选择选择母版页复选框。图7-2显示了用Visual Studio .NET 2005创建内容页面的第一步。添加了新项后,就可以选择要引用的母版页。这个例程会自动创建一个内容页面,其中包含MasterPageFile属性和一个或几个Content服务器控件(取决于ContentPlaceHolder控件在母版页中定义的个数)。图7- 2 建立内容页面右击解决方案资源

14、管理器中需要的母版页,从菜单中选择添加内容页,也可以创建内容页面。内容页面放在母版页所在的位置上,其名称是Default.aspx,除非已存在该名称的文件。7.2 编程修改母版页创建母版页和内容页面是很简单的,但创建动态网站还可以利用许多其他技术。母版页可以在内容页面中使用ASP.NET 2.0版本提供的Page类的一个属性Master来编程处理。Master属性可以编程访问由内容页面引用的母版页,完成修改标题,添加其他元数据属性,添加样式表引用,以及修改控件集合等操作。7.2.1 修改母版页的标题部分根据母版页建立相应的内容页时,内容页会自动产生一个缺省标题:Untitled Page的默认

15、,如果要固定此页面的标题则直接修改内容页面的title属性即可,当用户需要继承母版页的标题做为内容页标题时,则删除内容页的标题后,页面所呈现出来的标题就是母版页的标题。如果要修改母版页的标题部分,可以调用内容页面中的Master.Page.Header属性。访问标题时,可以修改标题,甚至添加新的元数据内容,如下所示:/Content Pageprotected void Page_Load(object sender, EventArgs e) HtmlHead head = this.Master.Page.Header; head.Title = 内容页面示例; HtmlMeta meta

16、 = new HtmlMeta(); meta.Name = Keywords; meta.Content = 母版页s,ASP.NET; head.Controls.Add(meta);上面的代码访问内容页面的Master属性,用它获得Header属性。接着修改标题,在标题的Controls集合中添加一个新的HtmlMeta控件,该控件指定与内容页面相关联的关键字。在母版页中定义的head标记必须添加了runat=server属性,这样Header属性才能返回一个HtmlHead对象实例: 母版页 Demo如果head标记没有runat=server属性,代码就会返回一个错误,因为HtmlH

17、ead对象是空的。7.2.2 查找母版页中的控件在内容页中,Page对象具有一个公共属性Master,该属性能够实现对相关母版页基类MasterPage的引用。母版页中的MasterPage相当于普通ASP.NET页面中的Page对象,因此,可以使用Masterpage对象实现对母版页中各个子对象的访问,但由于母版页中的控件是受保护的,不能直接访问,那么就必须使用MasterPage对象的FindControl方法实现。练习:访问母版页上的控件练习内容:下面的练习示例主要通过使用FindControl方法,获取母版页中用于显示系统时间的Label控件。练习步骤:1、 在例7-1生成的母页Mas

18、terDemo.master基础上,加入下Lable控件lblDate,用于显示当前的日期2、 在MasterDemo.master母版页的Page_Load事件中,使母版页的Label控件显示当前系统日期的代码如下。 protected void Page_Load(object sender, EventArgs e)this.labMaster.Text = 今天是+DateTime.Today.Year+年+DateTime.Today.Month+月+DateTime .Today.Day+日;3、在前面建立的内容中页面ContentDemo.aspx中加入一个Lable控件,命名为

19、lblContentDate,将它来获取母版页中的Lable控件中的日期,在此页面的Page_LoadComplete事件中,写入如下代码。 protected void Page_LoadComplete(object sender, EventArgs e) Label lblMaster = (Label)this.Master.FindControl(lblDate); lblContentDate.Text = lblMaster.Text; 代码分析:由于在母版页的Page_Load事件引发之前,内容页Page_Load事件已经引发,所以,因此本练习中使用ASP.NET2.0新增的

20、Page_LoadComplete事件,利用FindControl()方法来获取母版页的控件,其中Page_LoadComplete事件是在网页加载结束时触发。当然还可以在Label控件的PreRender事件中完成此功能7.2.3 定义母版页的属性FindControl()方法是有效的,但需要转换类型,因为它返回Control类型的对象。虽然进行转换的系统开销非常小,但还有一种更容易的方法来访问母版页中的lblDate。该方法不使用FindControl(),而是在母版页中定义一个公共属性,直接把lblDate返回为Label类型: public Label LbLDate get retu

21、rn this.lblDate; 这里的LbLDate属性只是定义了一个get块,返回对母版页中LbLDate面板控件的直接引用。但是,访问该属性也需要进行类型转换。调用内容页面中的Master.PnlLogin会失败,因为LbLDate不是MasterPage对象的一个有效属性,其中MasterPage对象是调用Master属性返回的。要获得LbLDate属性,必须把MasterPage对象转换为相应的特定母版页类型,如下所示:Label lblMaster = (第七章_MasterDemo)this.Master).LbLDate;这比使用FindControl()更简洁、更高效,因为不

22、必迭代访问母版页的Controls集合来定位lblDate,但仍需要进行类型转换。这里还假定母版页总是第七章_MasterDemo类型,根据站点的动态性质,母版页可能是第七章_MasterDemo类型,也可能不是。7.2.4 使用MasterType指令为了调用母版页的LbLDate属性,且不进行任何类型转换,需要利用内容页面中的MasterType指令。MasterType指令位于内容页面的开头,提供了对母版页的强类型化访问,便于调用定制属性或方法。它允许使用VirtualPath属性指定母版页的虚拟路径,或使用TypeName属性指定母版页类的名称。注意,可以使用VirtualPath或T

23、ypeName,但不能同时使用它们。如果使用了TypeName,母版页类就必须在一个已链接的程序集上是可用的,例如App_Code文件夹中的代码创建的程序集。使用MasterType指令和VirtualPath属性的示例如下:从使用MasterType指令的内容页面上调用Master属性时,会自动访问相应的母版页类型及其所有关联的属性和方法。现在,就可以直接访问母版页中定义的LbLDate属性了,不需要任何类型转换: protected void Page_LoadComplete(object sender, EventArgs e) /直接访问Master属性返回强类型对象,再通过此对象返

24、回LbLDate属性 Label lblMaster = this.Master.LbLDate; lblContentDate.Text = lblMaster.Text; 提示:使用MasterType指令可以提供最佳性能,因为不必使用FindControl()迭代母版页的Controls集合,来获得lblDate,不需要对定义LbLDate属性的相应母版页类型进行转换,编写的代码量最少,错误也比较少且效率较高。7.3 嵌套母版页许多公司都有多个发布到网站上的部门。每个部门常常自由创建自己的布局和内容,终端用户会在部门之间导航。使公司的网站有统一的结构和布局是一个困难的任务,幸好,利用嵌套

25、母版页的功能,可以解决这一难题。7.3.1 创建嵌套的母版页上面的母版页,定义了标准的公司标题、脚标,每个部门站点都必须使用它。每个部门站点还可以创建自己的母版页,表示其业务站点上Web页面的布局。然后,把这个部门的母版页嵌套在标准的网站母版页中。这么做对终端用户有好处,因为无论他们访问哪个部门站点,总是会看到标准的标题、脚标和菜单,还给部门站点的发布者提供了一些权限,因为他们可以创建自己的嵌套母版页。每个部门都可以利用标准的公司母版页创建本部门专用的母版页。尽管部门母版页有其独特的方面,但它需要引用标准的公司母版页。为此,可以使用Master指令的MasterPageFile属性。示例7-4是人力资源部门母版页的一个例子。示例7-4 部门母版页 人力资源部门的母版页 仔细查看人力资源部门部门母版页,注意它引用了公司的标准网站母版页,其名称是MasterDemo.master。部门母版页还定义了一个Content服务器控件,该控件引用了在标准母版页(本例是cphMain)中定义的ContentPlaceHolder ID。Content控件必须添加,因为这个母版页嵌套在标准的公司

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1