ASP.NET 母版页

使用 ASP.NET 母版页可以在应用程序中为网页创建一致的布局。一个母版页就可以为应用程序中的所有网页(或一组网页)定义所需的外观和标准行为。然后可以创建包含要显示的内容的各个内容页。当用户请求内容页时,这些内容页将与母版页合并,生成组合了母版页的布局以及内容页的内容的输出。

母版页和动态 Web 模板

母版页和动态 Web 模板均可用来创建一致的布局,该布局对于网站中的所有网页都可以很方便地更新。对于 ASP.NET 文件,可以使用母版页来定义一致的外观以及要在所有网页中共享的内容。对于 HTML 文件,可以使用动态 Web 模板。

母版页

动态 Web 模板

用于 .aspx 文件

用于 .htm 或 .html 文件

请求网页时,母版页内容和网页内容将在服务器上合并在一起

模板内容存在于所有基于该模板的网页中,当模板更新后,必须更新所有网页中的模板内容

各个网页的内容必须位于 <asp:contentplaceholder> 和 </asp:contentplaceholder> 标记之间

各个网页的内容必须位于 <!-- #BeginEditable --> 和 <!-- #EndEditable --> 标记之间

用于 ASP.NET 文件的母版页的优点

母版页提供了多种通过传统方式创建的功能,这些传统方式包括:重复复制现有代码、文本和控件元素;使用框架集;对通用元素使用包含文件;使用 ASP.NET 用户控件;等等。母版页具有下列优点:

  • 使用母版页可以集中处理网页的通用功能,因此只需要在一个位置进行更新。

  • 使用母版页可以方便地创建一组控件和代码,并将结果应用于一组网页。例如,可以在母版页上使用控件来创建一个适用于所有网页的菜单。

  • 通过允许控制占位符控件的呈现方式,母版页使您可以在细节上控制最终网页的布局。

  • 母版页提供一个对象模型,使用该对象模型可以从各个内容页自定义母版页。

母版页的工作原理

母版页实际上包含两部分,即母版页本身与一个或多个内容页。

母版页

母版页是具有预定义布局(可包括静态文本、HTML 元素和服务器控件)且扩展名为 .master 的 ASP.NET 文件,例如 MySite.master。母版页由特殊的 @ Master 指令标识,该指令替代了普通 .aspx 网页使用的 @ Page 指令。

除 @ Master 指令外,母版页还包含网页的所有顶级 HTML 元素,如 html、head 和 form。例如,在母版页上,可以将一个 HTML 表格用于布局,将一个 IMG 元素用于公司徽标,将静态文本用于版权声明并使用若干个服务器控件为网站创建标准导航。可以在母版页中使用任何 HTML 元素和 ASP.NET 元素。

除了将在所有网页上显示的静态文本和控件以外,母版页还包含一个或多个 ContentPlaceHolder 控件。这些占位符控件定义了用来显示可替换内容的区域。随后,在内容页中定义可替换内容。

内容页

通过创建各个内容页来定义母版页上各个占位符控件的内容,这些内容页是绑定到特定母版页的 ASP.NET 网页(.aspx 文件以及可选的代码隐藏文件)。

创建 Content 控件之后,可以向这些控件添加文本和控件。

母版页的运行时行为

运行时,IIS 按照下面的顺序处理母版页:

  1. 用户通过键入内容页的 URL 来请求某个网页。

  2. 获取该网页之后,将读取 @ Page 指令。如果该指令引用一个母版页,则也读取该母版页。如果这是第一次请求这两个网页,将对这两个网页都进行编译。

  3. 包含已更新内容的母版页将合并到内容页的控件树中。

  4. 各个 Content 控件的内容会合并到母版页中相应的 contentplaceholder 控件中。

  5. 浏览器中将呈现生成的合并页。

从用户的角度来看,合并后的母版页和内容页是一个由多块内容组合而成的独立网页。该网页的 URL 是内容页的 URL。

引用外部资源

内容页和母版页都可以包含引用外部资源的控件和元素。例如,两者都可以包含引用图像文件的图像控件,或包含引用其他网页的定位标记。

合并后的内容页和母版页的上下文是内容页的上下文。这会影响在定位标记中指定资源(如图像文件和目标网页)的 URL 的方式。

服务器控件

在母版页上的服务器控件中,ASP.NET 会动态修改引用外部资源的属性的 URL。例如,可以将一个 Image 控件放到母版页上,并相对于母版页设置其 ImageUrl 属性。在运行时,ASP.NET 将修改该 URL,使它能够在内容页的上下文中正确解析。

ASP.NET 会在下列情况下修改 URL:

  • URL 是某个 ASP.NET 服务器控件的属性。

  • 该属性在控件内部标记为 URL。(该属性用 UrlPropertyAttribute 特性来标记。)在实际情况中,那些常用来引用外部资源的 ASP.NET 服务器控件属性会采用这种方式标记。

其他元素

ASP.NET 无法修改非服务器控件的元素上的 URL。例如,如果在母版页上使用一个 IMG 元素并将其 src 属性设置为一个 URL,则 ASP.NET 不会修改该 URL。在这种情况下,该 URL 会在内容页的上下文中进行解析并创建相应的 URL。

通常,在母版页上使用元素时,建议您使用服务器控件,即使是对不需要使用服务器代码的元素也是如此。例如,不使用 IMG 元素,而使用 Image 服务器控件。这样,ASP.NET 就可以正确解析 URL,而且还可以避免移动母版页或内容页时可能引发的维护问题。

有关使用母版页的帮助

有关母版页的详细信息,请参阅 MSDN Library 中的下列 ASP.NET 主题:

ASP.NET 母版页概述

ASP.NET 母版页和内容页中的事件

以编程方式使用 ASP.NET 母版页

另请参见

概念

创建母版页

根据母版页创建网页

“母版页”工具栏

将内容添加到内容页