2.0 中的新增功能
母版页 -- 母版页功能可以为您的站点定义公用的结构和界面元素,如页眉、页脚或导航栏,结构和元素定义在一个称为“母版页”的公共位置,由网站中的多个页所共享。这样可提高站点的可维护性,避免对共享站点结构或行为的代码进行不必要的复制。
本节讨论 ASP.NET 2.0 中的母版页功能。
与主题和外观允许您从页代码中分解出样式定义并将定义保留在一个公共文件中一样,母版页对于页布局也起着相同的作用。母版页是包含标记和控件的页面,这些标记和控件应在站点中的多个页面之间共享。例如,如果您的所有页都应具有相同的页眉和页脚标题或具有相同的导航菜单,则可以在母版页中一次性定义这些元素,然后所有与此母版页关联的页将继承这些公用元素。在母版页中定义页眉、页脚和导航的优点是这些元素只需定义一次,而不需要在站点的各页中使用重复代码定义多次。
母版页和内容页
定义母版页与定义普通页一样。母版页可以包含标记、控件或代码,也可以包含这些元素的任意组合。但是,母版页可以包含一种特殊类型的控件,称为 ContentPlaceHolder 控件。ContentPlaceHolder 定义了一个母版页呈现区域,可由与母版页关联的页的内容来替换。ContentPlaceHolder 还可以包含默认内容,以免派生页不需要重写此内容。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>
为了将母版页和普通页加以区分,母版页以文件扩展名 .master 保存。在某一页的 Page 指令中定义 MasterPageFile 属性,便可以从母版页派生该页,如下所示。与母版页关联的页称为内容页。
<%@ Page MasterPageFile="Site.master" %>
内容页可声明 Content 控件,该控件专门重写母版页中的内容占位符部分。Content 控件通过其 ContentPlaceHolderID 属性与特定的 ContentPlaceHolder 控件关联。内容页的标记和控件只能包含在 Content 控件内;内容页不能有自己的顶层内容,但可以有指令或服务器端代码。
<%@ Page MasterPageFile="Site.master" %>
<asp:content id="Content1" contentplaceholderid="FlowerText" runat="server">
With sunshine, water, and careful tending, roses will bloom several times in a season.</asp:content><asp:content id="Content2" contentplaceholderid="FlowerPicture" runat="server">
<asp:Image id="image1" imageurl="~/images/rose.jpg" runat="server"/>
</asp:content>
下面的示例演示了母版页和内容页之间的关系。此例中的母版页定义了两个 ContentPlaceHolder 区域(分别为 FlowerPicture 和 FlowerText),还定义这两个区域的一些默认内容。站点中的各个内容页从母版页继承公用站点布局和外观,但以自己的内容重写命名的 ContentPlaceHolder 区域的默认内容。请注意,此站点中的 Default.aspx 页未定义任何 Content 控件,因此,该页只从母版页继承默认内容。
VB Master and Content Pages
母版页中的 URL 重置
关于上面的示例需要注意的一点是,母版页中有多处使用相对路径语法引用图像、样式表或页引用之类的 URL 资源,例如:
<head> <link rel="stylesheet" href="StyleSheet.css" type="text/css" /></head><a href="daffodil.aspx">Daffodil</a><