母版页是许多开发者试图创建替代品的强大功能之一,但在ASP.NET 2.0之前,几乎没有开发平台能够实现与之相近的功能。尽管母版页功能强大且优雅,但很少有人深入理解它所能带来的全面影响。因此,在本文中,将深入探讨母版页的深层含义。
母版页的概念源自PowerPoint。多年来,PowerPoint实现了母版页的概念(在PowerPoint中称为幻灯片母版)。基本思想是通过在一个页面(母版页)上放置所有共同的元素来减少重复,然后在母版页的基础上构建其余页面。在编程术语中,可以将母版页视为一个虚拟的基类,仅用于继承目的。
例如,而不是在每个单独的页面上复制网页头部,只需在母版页中创建网页头部,然后创建所有页面(或从母版页继承)。
在母版页中,可以创建内容占位符。顾名思义,内容占位符是为在母版页上构建(或继承)的页面提供内容的占位符。
在母版页中:
<asp:contentplaceholder id="Text" runat="server"/>
在网页中:
<asp:content id="Content1" contentplaceholderid="Text" runat="server">Some text.</asp:content>
如前所述,它减少了重复。通过将公共元素放在一个母版页中,可以避免在每个页面上重复这些元素。
可以有多个母版页相互继承(或嵌套)。例如,母版页B继承母版页A。因此,直接继承母版页B的页面Gamma也间接继承了母版页A。然而,Visual Studio 2005中没有为这个特性提供设计时支持,因此需要手动编码实现。
母版页A的页面头部:
<%@ master language="C#" %>
母版页B的页面头部:
<%@ master language="C#" masterpagefile="~/MP_A.master"%>
页面Gamma的页面头部:
<%@ page language="C#" masterpagefile="~/MP_B.master" %>
假设正在开发一个电子商务应用程序,页面的头部有一个购物车小计用户控件。整个头部可以放在母版页中,购物车小计用户控件可以通过页面的代码后端程序轻松访问。
MasterPage m = Page.Master;
Cart c = (Cart)m.FindControl("oCart");
c.SubTotal = 45.33;