母版页与 Windows SharePoint Services 3.0






4.60/5 (11投票s)
2006年9月5日
8分钟阅读

76923
本文介绍 ASP.NET 2.0 中母版页的功能以及它们在 Windows SharePoint Services 3.0 中的使用情况。
引言
视觉继承是目前门户应用程序开发中最具挑战性且通常是必需的功能之一。为了在门户应用程序中实现这一点,它带来了挑战,并且需要相当大的努力才能实现此功能。Windows SharePoint Services 2.0 没有提供任何功能使用户能够“模板化”他们的站点。换句话说,没有真正通用的功能或方法可以通过模板来标准化整个站点。
需要对整个站点进行模板化
对整个站点进行模板化肯定是有必要的,因为在开发门户时,我们会遇到需要整个站点通用页眉、页脚和菜单的场景。当处理包含动态内容的站点时,这肯定非常重要。在这些站点中,每个页面都与其他页面不同,仅在于内容;其余部分(外观)在整个站点中保持相同。同样,在这些站点中,需要对整个站点进行模板化。
因此,从上述解释中,我们了解到需要一项功能或一种方法来实现对整个站点的模板化。
ASP.NET 2.0
ASP.NET 2.0 引入了一项强大的页面模板功能,称为母版页。通过母版页,可以为整个站点定义标准的页面布局,包括横幅、公共页眉、公共页脚、控件和菜单等元素。我想指出的是,母版页的实现方式与 ASP.NET 1.1 中自定义模板机制的工作方式非常相似,但在 ASP.NET 2.0 中,Visual Studio 2005 提供了设计器支持。
母版页
母版页是一种模板,通过它可以为整个站点定义标准模板。此标准模板可以包含对整个站点通用的元素,如公共页眉、公共页脚、横幅、公共链接等。
定义母版页的另一种方法是:“母版页是一个扩展名为 .master 的 ASP.NET 文件(例如,MySite.master),具有预定义的布局,可以包含静态文本、HTML 元素和服务器控件。”
母版页通过“@ Master
”指令标识,该指令取代了普通 .aspx 页面使用的“@ Page
”指令。以下代码片段显示了如何使用母版页指令:
' VB.Net:
<%@ Master Language="VB" %>
//C#:
<%@ Master Language="C#" %>
母版页基本上包含两个概念元素。它们如下:
母版页
如上所述,母版页本质上是一个标准的 ASP.NET 页面,但它使用 .master 扩展名和 <%@ master %>
指令而不是 <%@ page %>
。此母版页文件作为其他页面的模板,因此通常包含顶级 HTML 元素、主窗体、页眉、页脚等。在母版页中,您将在希望内容页提供页面特定内容的位置添加 ContentPlaceHolder
控件的实例。
创建母版页
<!-- VB.Net: -->
<% @ Master Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head runat="server" >
<title>This is the Master page title</title>
</head>
<body>
<form id="MyForm1" runat="server">
<table>
<tr>
<td><asp:contentplaceholder id="Main" runat="server" /></td>
<td><asp:contentplaceholder id="Footer" runat="server" /></td>
</tr>
</table>
</form>
</body>
</html>
<!-- C#: -->
<%@ Master Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head runat="server" >
<title>This is the Master page title</title>
</head>
<body>
<form id="MyForm1" runat="server">
<table>
<tr>
<td><asp:contentplaceholder id="Main" runat="server" /></td>
<td><asp:contentplaceholder id="Footer" runat="server" /></td>
</tr>r>
</table>
</form>
</body>
</html>
在上面的代码片段中,除了使用静态文本和控件外,还可以根据页面添加内容。这可以通过使用 ContentPlaceHolder
关键字来实现。在上面的部分中,我提到了需要根据每个页面创建动态内容的站点。此功能可以使用 ContentPlaceHolder
关键字来实现。ContentPlaceHolder
控件在母版页中定义内容区域,并呈现内容页中相关 Content 控件的所有文本、标记和服务器控件。
在上面的示例中,ContentPlaceHolder
是“Main
”和“Footer
”。
内容页
内容页是普通的 .aspx 文件,在其页面指令中使用“masterpagefile
”属性指定关联的母版页。您可以称之为派生类(基类是母版页模板)。内容页的主要目的是为继承的母版页模板提供内容。因此,内容页只能包含 Content 控件的实例。
还应注意,内容页中存在的 Content 控件必须映射到内容页引用的母版页中定义的特定 ContentPlaceHolder
控件。
创建内容页
<!-- VB.Net -->
<%@ Page Language="VB" MasterPageFile="~/Master.master"
Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
Will contain the Main content.
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >
Will contain the Footer content.
</asp:content>
<!-- C# -->
<%@ Page Language="C#" MasterPageFile="~/Master.master"
Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
Will contain the Main content.
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >
Will contain the Footer content.
</asp:content>
需要注意的是,@ Page
指令会将内容页绑定到指定的母版页,并且内容页的内容将被合并到母版页中。另请注意,Content 控件之外没有其他标记(我已经在上面提到过,内容页的主要目的是显示内容。这就是为什么在上面提到的控件页面示例中没有其他标记的原因。)。
Windows SharePoint Services 3.0 中的母版页
现在,问题来了,母版页在 Windows SharePoint Services 3.0(预计于 2006 年 12 月发布)中扮演什么角色?值得注意的是,Windows SharePoint Services 3.0 从头开始重新设计,以适应或拥抱 ASP.NET 2.0 提供的母版页基础结构。Windows SharePoint Services 3.0 中的每个站点都提供一个名为母版页库的特殊目录,其中包含一个名为 default.master 的母版页。
此母版页为每个站点的首页(Default.aspx)以及与列表和文档库关联的标准 Windows SharePoint Services 表单页面(例如:AllItems.aspx、NewItem.aspx)定义了一个通用布局。母版页布局包括标准的 Windows SharePoint Services 菜单和导航控件。
可以仅自定义站点的母版页,而保持内容页不变。同样,也可以仅自定义一个内容页,而保持母版页不变。如果您想丢弃对母版页或内容页所做的更改,则可以使用 Windows SharePoint Services 3.0 的基于浏览器的 UI 或 Office SharePoint Designer 2007 来完成,后者提供了简单的基于菜单的选项来丢弃所做的更改。
母版页和内容页定义的模板存储在前端 Web 服务器的本地文件系统中。每个站点最初都使用母版页模板和内容页模板的“幽灵”(即未自定义的版本)。一旦它们被自定义(即“取消幽灵”),相同的就会保存在 SQL Server 数据库中。
Windows SharePoint Services 3.0 的默认母版页包含几个 ContentPlaceHolder
控件,以便于自定义到单个内容页。默认情况下,Windows SharePoint Services 3.0 的内容页使用下表中定义的占位符。下表描述了 Windows SharePoint Services 默认母版页中包含的占位符以及每个占位符在页面上的表示。
序号 | 内容占位符 | 描述 |
1 | PlaceHolderAdditionalPageHead 窗体底部 |
需要位于页面 <head> 标记内的其他内容,例如,对样式表中的脚本的引用 窗体底部 |
2 | PlaceHolderBodyAreaClass 窗体底部 |
页面标题中的其他正文样式 窗体底部 |
3 | PlaceHolderBodyLeftBorder 窗体底部 |
主页面正文的边框元素 窗体底部 |
4 |
|
主页面正文的右边距 窗体底部 |
5 | PlaceHolderCalendarNavigator 窗体底部 |
在页面上显示日历时,显示用于在日历中导航的日期选择器 窗体底部 |
6 | PlaceHolderFormDigest 窗体底部 |
“窗体摘要”安全控件 窗体底部 |
7 | PlaceHolderGlobalNavigation 窗体底部 |
全局导航面包屑 窗体底部 |
8 | PlaceHolderHorizontalNav |
页面的顶部导航菜单 |
9 | PlaceHolderLeftActions |
左导航区域底部 |
10 | PlaceHolderLeftNavBar |
左导航区域 |
11 | PlaceHolderLeftNavBarBorder |
左导航栏的边框元素 |
12 | PlaceHolderLeftNavBarDataSource |
左导航菜单的数据源 |
13 | PlaceHolderLeftNavBarTop |
左导航区域顶部 |
14 | PlaceHolderMain |
页面的主要内容 |
15 | PlaceHolderMiniConsole |
显示页面级别命令的位置,例如,WIKI 命令,如“编辑页面”、“历史记录”和“传入链接” |
16 | PlaceHolderNavSpacer |
左导航区域的宽度 |
17 | PlaceHolderPageDescription |
页面内容的描述 |
18 | PlaceHolderPageImage |
页面左上角的页面图标 |
19 | PlaceHolderPageTitle |
显示在浏览器标题栏中的页面<Title> |
20 | PlaceHolderSearchArea |
搜索框区域 |
21 | PlaceHolderSiteName |
站点名称 |
22 | PlaceHolderTitleAreaClass |
页面标题中的附加样式 |
23 | PlaceHolderTitleAreaSeparator |
显示标题区域的阴影 |
24 | PlaceHolderTitleBreadcrumb |
主内容面包屑区域 |
25 | PlaceHolderTitleInTitleArea |
紧跟在面包屑下显示的页面标题 |
26 | PlaceHolderTitleLeftBorder |
标题区域的左边框 |
27 | PlaceHolderTitleRightMargin |
标题区域的右边距 |
28 | PlaceHolderTopNavBar |
顶部导航区域 |
29 | PlaceHolderUtilityContent |
需要位于页面底部的额外内容 |
30 | SPNavigation |
Windows SharePoint Services 中默认为空。可用于其他页面编辑控件。 |
31 | WSSDesignConsole |
页面处于“编辑页面”模式时(单击“站点操作”,然后单击“编辑页面”后)的页面编辑控件 |
摘要
很明显,母版页概念解决了在整个站点中创建和维护标准模板的许多问题。母版页引入了视觉继承的概念,这对于以更加通用的方式为整个站点设计 UI 来说是一大福音。开发人员不再需要在 ASP.NET 中构建复杂的控件层次结构操作技术。