首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.5  使用Master Page

Master Page是ASP.NET 2.0中的一个新增特性,也是窍门程序变成产品特性的一个典型例子。Master Page的目的是定义一个由页面使用的布局模板。在应用程序中,并不是所有的页面都必须使用Master Page。可以让应用程序在不同的页面上使用多个Master Page,有时这是很理想的。Master Page可以定义一个或多个ContentPlaceHolder区域,这样内容页面就可以使用Master Page上提供的默认内容,或者覆盖它们,提供自己的内容。Web窗体页面使用Master Page特性,就变成了内容页面。内容页面仅提供在Master Page定义的ContentPlaceHolder中填充的内容。图2-6是一个定义了三个内容区域的Master Page示例。

图  2-6

在建立新的应用程序时,确定是否要使用Master Page的概念是很重要的。如果在开发循环的后期再决定,就必须修改每个页面,使之变成内容页面。

创建Master Page时,需要考虑由谁处理应用程序的外观和操作方式。我们定义的ContentPlaceHolder会影响布局的灵活性,所以必须仔细考虑站点可能使用的各种配置。

看看图2-6中显示的示例的HTML标记,注意这三个PlaceHolder控件都使用标准的HTML表,在页面上组织它们。图2-6显示了上一个范例的HTML标记。注意ContentPlaceHolder的名称分别是ContentPlaceHolder1、2和3。使用默认名称并没有什么错,但建议选择其他名称,以便更清晰地描述内容区域的用途。这将有助于查看内容页面的开发人员更好地理解该区域的用法。例如,上面的区域叫作ContentTopNav,在使用时会更清楚其用途。

<form id="form1" runat="server">

   <div>

      <table width="100%">

          <tr>

            <td colspan="2">

                <asp:ContentPlaceHolder ID="ContentPlaceHolder1"

runat="server" />

             </td>

          </tr>

          <tr>

             <td width="200px">

                <asp:ContentPlaceHolder ID="ContentPlaceHolder2"

runat="server" />

             </td>

              <td>

                <asp:ContentPlaceHolder ID="ContentPlaceHolder3"

runat="server" />

              </td>

         </tr>

     </table>

   </div>

</form>

还可以在运行期间动态修改Master Page,进而动态修改站点的布局。详见第17章。

在使用Master Page时,我们的页面并没有继承Master Page,而是合并了Master Page,生成复合的输出页面。实际上,在页面类中,可以使用Page.Master属性访问活动的Master Page。默认情况下,这个属性是System.Web.UI.MasterPage类型。

可以在Master Page上添加定制的属性、方法和事件。使用下面的页面指令,可以修改属性的类型。下面的例子把Page.Master属性改为MVPHacks.BaseClasses.BaseMasterPage:

<%@ MasterType TypeName="MVPHacks.BaseClasses.BaseMasterPage" %>

或者

<%@ MasterType VirtualPath="~/Masters/SiteMaster.master" %>

如果Master Page的类型与MasterType指令上指定的类型不符,就会产生一个错误。例如,如果Master Page上有一个属性ActiveProductID,就可以使用强类型化的名称访问它,如下面的例子所示:

this.Master.ActiveProductID=50;

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论