在创建一个完整的母版页之后,接下来必然要创建内容页。从用户访问的角度来讲,内容页与最终结果页的访问路径相同,这好像表明二者是同一文件,实际不然。结果页是一个虚拟的页面,没有实际代码,其代码内容是在运行时状态下母版页和内容页合并的结果。在开始介绍内容页之前,还有两个概念需要强调:一是内容页中所有内容必须包含在Content控件中;二是内容页必须绑定母版页。虽然内容页的扩展名与普通ASP.NET页面相同,但是,其代码结构有着很大差别。在创建内容页的过程中,必须时刻牢记以上两个重要概念。
与创建母版页差不多,创建内容页的过程比较简单。单击“网站”命令菜单中的“添加新项...”,或者在解决方案管理器中右键单击项目,在下拉菜单中选择“添加新项...”,就可以打开如图1所示的窗口。
如图1所示,要求选择新建文件类型。由于内容页与普通.aspx页面的扩展名相同,因此,选择的是Web窗体图标。接着,还需要设置文件名Index.aspx。设置完成之后,不可直接单击“添加”按钮。因为,内容页必须绑定母版页,所以还需要对复选框“将代码放在单独的文件中”和“选择母版页”进行设置。前者在前文中已经说明,重点说明后者。“选择母版页”复选框用于设置所创建Web窗体是否绑定母版页。如果创建的是内容页,那么必须选中该选项。结束以上操作之后,可以单击“确定”按钮,从而弹出如图1所示的窗口。
窗口左侧是项目文件夹,右侧是文件夹中的母版页列表。图1所示窗口中已经列举了刚刚创建的母版页MasterPage.master,选中该文件,单击“确定”按钮即可。经过以上步骤,就顺利创建了一个绑定母版页MasterPage.master的内容页Index.aspx了。
图1 添加内容页
图2 选择母版页
下面列出内容页Index.aspx的源代码:
内容页Index.aspx文件源代码
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" Title="示例5-1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<img src="images/pagepic.gif" width="244" height="223" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" runat="Server">
<p> </p><p> </p>
<h1>网站介绍</h1>
<p>本页面采用来自ASP.NET 2.0技术的母版页新特性进行开发。 主要包括两个页面:母版页和内容页。 母版页后缀名是.master,其封装网站中的共用元素。 内容页实际是普通的.aspx文件,它包含除母版页的其他内容。在运行时,ASP.NET引擎将两种页面内容合并执行,最后将结果发给客户端浏览器。</p>
</asp:Content>
以上粗体代码是内容页的代码结构。从中可以看出,内容页与普通.aspx文件在代码上的不同。内容页没有<html>、<body>、<form>等关键Web元素,这些元素都被放置在母版页中。内容页中除了代码头声明,仅包含Content控件。内容页的代码头声明与普通.aspx文件相似。但是,新增加了两个属性MasterPageFile和Title。属性MasterPageFile用于设置该内容页所绑定的母版页的路径,属性Title用于设置页面title值。在创建内容页过程中,由于已经指定了所绑定母版页,因此,Visual Studio 2005将自动设置MasterPageFile属性值。另外,在源代码中,还设置了两个Content控件Content1和Content2。两个控件内部包含的内容是页面的非公共部分。通过设置属性ContentPlaceHolderID,将Content1与母版页的ContentPlaceHolder1对应,将Content2与母版页的ContentPlaceHolder2对应。在页面运行时,Content控件中包含的内容将显示在母版页中的对应位置。
图3所示显示了内容页Index.aspx的设计时截图。
图3 内容页设计时视图
同母版页一样,Visual Studio 2005支持对于内容页的可视化编辑,并且这种支持是建立在只读显示母版页内容基础上的。在编辑状态下,可以查看母版页和内容页组合后的页面外观,但是,母版页内容是只读的(呈现灰色部分),不可被编辑,而内容页则可以进行编辑。如果需要修改母版页内容,则必须打开母版页。