当前位置:首页>>在线学习>>net培训

母版页

繁简对译:[]  字体设置:[] 2008-10-08  作者:ocean  阅读  次

母版页

课程目标

q    母版页

q    母版页所在位置

q    嵌套母版页

q    内容页

体验项目——<创建站点母版页 >

      创建了一个母版页,站点的左侧为分类栏,顶部为菜单栏,右下侧为主要工作区域。

什么是母版页

q ASP.NET 2.0为网站开发人员提供了一种在一个文件中定义多个网站页面布局的功能。这个以.master为扩展名的文件,称之为母版页。

q 单个母版页可以定义所有页面的相同外观和通用行为,因而开发人员无须在每个页面中编写重复的代码,并且在需要修改页面布局时只需修改母版页即可。

q 利用母版页,开发人员可以创建单个网页模板并在应用程序中将该模板用作多个网页的基础,这样就无需从头创建所有新网页。

q 一个网站可以设置多种类型的母版页,以满足不同显示风格的需要。

创建母版页的方法

下面通过示例来讲述创建母版页的方法。

首先创建一个新网站,然后右击应用程序名,在弹出的菜单中选择添加新项,在弹出的对话框中选择母版页,并使用MasterPage1.master默认名(可改名,但后缀不能改)。此时在界面中将出现一个ContentPlaceHolder方形窗口,这个方形窗口是配置网页的地方。可以先对网页进行布局,然后再将这个窗口移动到合适的地方。下面举例说明具体步骤。

(1) 选择布局菜单中的插入表命令以便进行布局。在插入表对话框中选择模板,然后在下拉列表中选择布局样式。在本例中选择的是页眉和边样式,如图所示。

(2) 用鼠标单击右下角的空间,并且将它的VAlign属性设置为Top,再将ContentPlaceHolder拖入到右下角的窗口中。

(3) 用鼠标单击左下角的空间,并且将它的VAlign属性设置为Top,再将TreeView控件从工具箱(ToolBox)拖入。

(4) 用类似方法将用户控件(User Control)拖入上面的空间中。

创建母版页的方法

 

 

16.3.3  在母版页中放入新网页的方法

可以直接在母版页中生成新网页,也可以在建立新网页过程中选择母版页。

1.直接从母版页中生成新网页

直接从母版页中生成新网页的步骤是:

(1) 打开母版页;

(2) 右击ContentPlaceholder控件,在弹出的菜单中选择添加内容页命令,以确定内含的新网页;

(3) 右击新网页,在弹出的菜单中选择编辑主表命令,然后在网页中增添新控件。

       此时新网页将被嵌入到母模板中,与母版页形成一个网页文件,网页的名字即新网页的名字。

2.在创建新网页中选择母版页

       在创建新网页中选择母版页的方法是:在网站中创建一新网页。此时,在网页名的右方提供了两项选择,可以从中选择一项或两项,或者两项都不选择。两种选择项的含义如下。

       将代码放在单独的文件中:代表采用代码分离方式。

       选择母版页:代表将新网页嵌入到母版页中。

       如果两项都不选择时,系统将创建一个单文件模式的独立网页,此网页将独立于母版页。

       如果选择了第2项,将弹出一文件列表,提供一个或多个母版页文件以供选择。当选择其中之一后,新网页就会嵌入到指定的母版页中。

       母版页与新网页将构成一个整体成为一个新的网页,新网页仍使用新产生的网页名。在母版页中将包括多个网页的共性部分,被嵌入的网页中包含的是网页的个性部分。这种关系可以用一个简单的表达式来表示:

                 default.aspx = Master Page + default.aspx

        网页与母版页的关系下图所示。

在母版页中放入新网页的方法

 

 

将已建成的网页放入母版页中

为了将已经建成的网页嵌入母版页中,需要在已经建成的网页中用手工方法增加或改写一些代码。

(1) 打开已建成的网页,进入它的代码界面,在页面指示语句中增加与母版页的联系。为此需增加以下属性,其中"~/MasterPage.master"代表母版页名。

<%@Page Language="C#" MasterPageFile=" ~/MasterPage.master"

AutoEventWireup="">

(2) 由于在母版页中已经包含有HTMLHeadBodyForm等标记,因此在网页中要删除所有这些标记,以避免重复。同样,类似于<H1></H1>的标记也要删除(div标记不要删除)

(3) 在剩下内容的前后两端加上Content标记,并增加ContentID属性,Runat属性以及ContentPlaceHolderID属性,后者的值(这里是ContentPlaceHolder1)应该与母版页中的网页容器相同。修改后的语句结构如下:

<asp:Content ID="bodyContent" ContentPlaceHolderID="ContentPlaceHolder1" Runat=Server>

 <div>

  

</div>

   </asp:Content>

就是说修改后的代码中除页面指示语句以外所有语句都应放置在<asp:Content></asp:Content>之间。

母版页和内容页

q  母版页和普通的.aspx页面基本类似,母版页可以包含标记、控件或代码,也可以包含这些元素的任意组合,它提供预先定义的布局,这些布局可以是静态HTML元素或者服务器控件。

q  但不同的地方是:

     l 母版页在页面定义部分把@Page替换成了@Master

     l 母版页都是以.master扩展名结尾,以防止浏览器直接打开它。

     l 母版页需要结合内容页实现它的功能。在某一页的Page指令中定义MasterPageFile属性,便可以从母版页派生该页,如下代码所示

     <%@ Page MasterPageFile="Site.master" %>

ContentPlaceHolder控件

q  母版页可以包含一种特殊类型的控件,称为ContentPlaceHolder控件。ContentPlaceHolder 定义了一个母版页呈现区域,可由与母版页关联的页的内容来替换。ContentPlaceHolder还可以包含默认内容,以免派生页不需要重写此内容。

q  ContentPlaceHolder控件的语法如下:

      <%-- ContentPlaceHolder control --%>

      <asp:contentplaceholder id="FlowerText" runat="server"/>

      <%-- ContentPlaceHolder with default content --%>

      <asp:contentplaceholder id="FlowerText" runat="server">

         <h3>Welcome to my florist website!</h3>

      </asp:contentplaceholder>

母版页中的URL问题

q 母版页中有多处使用相对路径语法引用图像、样式表或页引用之类的URL资源,如果母版页和内容页在同一目录中,代码将正常运行;但是,如果内容页实际上在另一个位置,这个相对路径就是错误的。要解决这个问题,可以采取以下方法之一:

l 在母版页中使用绝对URL路径,例如<img src="/myapplication/images/banner.gif" />

l 在服务器控件中使用相对URL或与应用程序相关的URL来代替静态标记,例如<asp:Image ImageUrl="~/images/banner.gif" runat="server" />

以编程方式访问母版页

q  内容页也可以通过编程方式访问其母版页。内容页使用<%@ MasterType %> 指令来创建对母版页的强类型引用,并指定到母版页的虚拟路径:

     <%@ MasterType VirtualPath="Site.master" %>

    然后,内容页可以使用Page类的Master属性来引用母版页了,代码如下所示:

     Master.FooterText = "This is a custom footer";

      AdRotator ad = (AdRotator)Master.FindControl("MyAdRotator");

      Master.FooterText = "This is a custom footer"

      Dim ad As AdRotator = Master.FindControl("MyAdRotator")

 

q  可以使用母版页以编程方式执行许多公共任务,包括:

l 访问在母版页上定义的成员(包括公共属性/方法或控件)。

l 动态地将母版页附加到内容页。

访问母版页上的成员

q 在运行时,母版页与内容页合并,因此内容页的代码可以访问母版页上的控件。如果母版页的 ContentPlaceHolder控件中包含一些控件,则这些控件被内容页的Content控件重写后将不可访问,这些控件是受保护的,因此不能作为母版页成员直接访问。但是,可以使用FindControl方法定位母版页上的特定控件。如果要访问的控件位于母版页的ContentPlaceHolder控件内部,必须首先获取对 ContentPlaceHolder 控件的引用,然后调用其 FindControl 方法获取对该控件的引用。

动态地附加母版页

q 除了以声明方式指定母版页(在 @ Page 指令或配置文件中)外,还可以动态地将母版页附加到内容页。因为母版页和内容页会在页处理的初始化阶段合并,所以必须在此前分配母版页。通常,在PreInit事件阶段动态地分配母版页,如下面的示例所示:

    void Page_PreInit(Object sender, EventArgs e)

    {   

      this.MasterPageFile = "~/NewMaster.master";

    }

实践项目——<创建站点母版页 >

程序的实现要求如下:

1)新建网站项目。

2)添加母版页。

3)添加对应的图片和布局。

4)设置CSS样式,控制页面样式。

本章总结

q    母版页

q    母版页所在位置

q    嵌套母版页

q    内容页

 

打印 收藏 关闭