正文:在MSDN上有一篇文章也是说如何制作一个最简单的Masterpage,但很不幸的告诉大家,那个文章所写的Masterpage是错误的,在某些特定的页面会抛Error,所以我就花了点时间自己重新整理一个。
<%
@Master language="C#"
%>
<% @ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <% @ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <% @ Import Namespace="Microsoft.SharePoint" %>
<% @ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<% @ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<% @ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Welcome.ascx" %>
<% @ Register TagPrefix="wssuc" TagName="DesignModeConsole" src="~/_controltemplates/DesignModeConsole.ascx" %>
< HTML dir ="<%$Resources:wss,multipages_direction_dir_value%>" runat ="server" xmlns:o ="urn:schemas-microsoft-com:office:office" __expr-val-dir ="ltr" >
< HEAD runat ="server" >
< META Name ="GENERATOR" Content ="Microsoft SharePoint" >
< META Name ="progid" Content ="SharePoint.WebPartPage.Document" >
< META HTTP-EQUIV ="Content-Type" CONTENT ="text/html; charset=utf-8" >
< META HTTP-EQUIV ="Expires" content ="0" >
< SharePoint:RobotsMetaTag runat ="server" />
< Title ID =onetidTitle >< asp:ContentPlaceHolder id =PlaceHolderPageTitle runat ="server" /></ Title >
< SharePoint:CssLink runat ="server" />
< SharePoint:Theme runat ="server" />
< SharePoint:ScriptLink language ="javascript" name ="core.js" Defer ="true" runat ="server" />
< SharePoint:CustomJSUrl runat ="server" />
< SharePoint:SoapDiscoveryLink runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderAdditionalPageHead" runat ="server" />
< SharePoint:DelegateControl runat ="server" ControlId ="AdditionalPageHead" AllowMultipleControls ="true" />
</ HEAD >
< BODY scroll ="yes" onload ="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();" >
< form runat ="server" onsubmit ="return _spFormOnSubmitWrapper();" >
<!-- 必选项 -->
< WebPartPages:SPWebPartManager id ="m" runat ="Server" />
<!-- 可选项,是头顶那个欢迎信息和登录的控件 -->
< wssuc:Welcome id ="IdWelcome" runat ="server" EnableViewState ="false" ></ wssuc:Welcome >
<!-- 可选项,SiteAction那个按钮的控件 -->
< SharePoint:SiteActions runat ="server" AccessKey ="<%$Resources:wss,tb_SiteActions_AK%>" id ="SiteActionsMenuMain"
PrefixHtml ="<div><div>"
SuffixHtml ="</div></div>"
MenuNotVisibleHtml ="&nbsp;" >
< CustomTemplate >
< SharePoint:FeatureMenuTemplate runat ="server"
FeatureScope ="Site"
Location ="Microsoft.SharePoint.StandardMenu"
GroupId ="SiteActions"
UseShortId ="true"
>
< SharePoint:MenuItemTemplate runat ="server" id ="MenuItem_Create"
Text ="<%$Resources:wss,viewlsts_pagetitle_create%>"
Description ="<%$Resources:wss,siteactions_createdescription%>"
ImageUrl ="/_layouts/images/Actionscreate.gif"
MenuGroupId ="100"
Sequence ="100"
UseShortId ="true"
ClientOnClickNavigateUrl ="~site/_layouts/create.aspx"
PermissionsString ="ManageLists, ManageSubwebs"
PermissionMode ="Any" />
< SharePoint:MenuItemTemplate runat ="server" id ="MenuItem_EditPage"
Text ="<%$Resources:wss,siteactions_editpage%>"
Description ="<%$Resources:wss,siteactions_editpagedescription%>"
ImageUrl ="/_layouts/images/ActionsEditPage.gif"
MenuGroupId ="100"
Sequence ="200"
ClientOnClickNavigateUrl ="javascript:MSOLayout_ChangeLayoutMode(false);"
/>
< SharePoint:MenuItemTemplate runat ="server" id ="MenuItem_Settings"
Text ="<%$Resources:wss,settings_pagetitle%>"
Description ="<%$Resources:wss,siteactions_sitesettingsdescription%>"
ImageUrl ="/_layouts/images/ActionsSettings.gif"
MenuGroupId ="100"
Sequence ="300"
UseShortId ="true"
ClientOnClickNavigateUrl ="~site/_layouts/settings.aspx"
PermissionsString ="EnumeratePermissions,ManageWeb,ManageSubwebs,AddAndCustomizePages,ApplyThemeAndBorder,ManageAlerts,ManageLists,ViewUsageData"
PermissionMode ="Any" />
</ SharePoint:FeatureMenuTemplate >
</ CustomTemplate >
</ SharePoint:SiteActions >
<!-- 可选项,设计状态下的Console -->
< asp:ContentPlaceHolder ID ="WSSDesignConsole" runat ="server" >
< wssuc:DesignModeConsole id ="IdDesignModeConsole" runat ="server" />
</ asp:ContentPlaceHolder >
<!-- 这个tag比较重要,它是设置Webpart的那个工具条,如果页面上不加上这个Tag,那个工具条就会生成在页面的最下端,从而破坏页面结构 -->
< PlaceHolder id ="MSO_ContentDiv" runat ="server" ></ PlaceHolder >
<!-- 必选项,这个就不用说了吧 -->
< asp:ContentPlaceHolder id ="PlaceHolderMain" runat ="server" ></ asp:ContentPlaceHolder >
< input type ="text" name ="__spDummyText1" style ="display:none;" size =1 />
< input type ="text" name ="__spDummyText2" style ="display:none;" size =1 />
<!-- 没用的PlaceHolder不要删除掉,因为有些页面会把东西输出到这些PlaceHolder的,少一个都可能会出错,把他隐藏就行 -->
< div style ="display:none" >
< asp:ContentPlaceHolder id ="PlaceHolderUtilityContent" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderBodyAreaClass" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderTitleAreaClass" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderGlobalNavigationSiteMap" runat ="server" >
< asp:SiteMapPath SiteMapProvider ="SPSiteMapProvider" id ="GlobalNavigationSiteMap" RenderCurrentNodeAsLink ="true" SkipLinkText ="" NodeStyle-CssClass ="ms-sitemapdirectional" runat ="server" />
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderGlobalNavigation" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderSiteName" runat ="server" >
< SharePoint:SPLinkButton runat ="server" NavigateUrl ="~site/" id ="onetidProjectPropertyTitle" >
< SharePoint:ProjectProperty Property ="Title" runat ="server" />
</ SharePoint:SPLinkButton >
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderSearchArea" runat ="server" >
< SharePoint:DelegateControl runat ="server" ControlId ="SmallSearchInputBox" />
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderHorizontalNav" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderTopNavBar" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder ID ="SPNavigation" runat ="server" >
< SharePoint:DelegateControl runat ="server" ControlId ="PublishingConsole"
PrefixHtml ="<tr><td colspan="4" id="mpdmconsole" class="ms-consolemptablerow">"
SuffixHtml ="</td></tr>" >
</ SharePoint:DelegateControl >
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderPageImage" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderTitleLeftBorder" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderTitleBreadcrumb" runat ="server" >
< asp:SiteMapPath SiteMapProvider ="SPContentMapProvider" id ="ContentMap" SkipLinkText ="" NodeStyle-CssClass ="ms-sitemapdirectional" runat ="server" />
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderPageTitleInTitleArea" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderMiniConsole" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderTitleRightMargin" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderLeftNavBarDataSource" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderCalendarNavigator" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderLeftNavBarTop" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderLeftNavBar" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderTitleAreaSeparator" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderLeftActions" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderNavSpacer" runat ="server" ></ asp:ContentPlaceholder >
< asp:ContentPlaceHolder id ="PlaceHolderLeftNavBarBorder" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderBodyLeftBorder" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderPageDescription" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderBodyRightMargin" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderFormDigest" runat ="server" >
< SharePoint:FormDigest runat =server />
</ asp:ContentPlaceHolder >
</ div >
</ form >
</ BODY >
</ HTML >
<% @ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <% @ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <% @ Import Namespace="Microsoft.SharePoint" %>
<% @ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<% @ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<% @ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Welcome.ascx" %>
<% @ Register TagPrefix="wssuc" TagName="DesignModeConsole" src="~/_controltemplates/DesignModeConsole.ascx" %>
< HTML dir ="<%$Resources:wss,multipages_direction_dir_value%>" runat ="server" xmlns:o ="urn:schemas-microsoft-com:office:office" __expr-val-dir ="ltr" >
< HEAD runat ="server" >
< META Name ="GENERATOR" Content ="Microsoft SharePoint" >
< META Name ="progid" Content ="SharePoint.WebPartPage.Document" >
< META HTTP-EQUIV ="Content-Type" CONTENT ="text/html; charset=utf-8" >
< META HTTP-EQUIV ="Expires" content ="0" >
< SharePoint:RobotsMetaTag runat ="server" />
< Title ID =onetidTitle >< asp:ContentPlaceHolder id =PlaceHolderPageTitle runat ="server" /></ Title >
< SharePoint:CssLink runat ="server" />
< SharePoint:Theme runat ="server" />
< SharePoint:ScriptLink language ="javascript" name ="core.js" Defer ="true" runat ="server" />
< SharePoint:CustomJSUrl runat ="server" />
< SharePoint:SoapDiscoveryLink runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderAdditionalPageHead" runat ="server" />
< SharePoint:DelegateControl runat ="server" ControlId ="AdditionalPageHead" AllowMultipleControls ="true" />
</ HEAD >
< BODY scroll ="yes" onload ="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();" >
< form runat ="server" onsubmit ="return _spFormOnSubmitWrapper();" >
<!-- 必选项 -->
< WebPartPages:SPWebPartManager id ="m" runat ="Server" />
<!-- 可选项,是头顶那个欢迎信息和登录的控件 -->
< wssuc:Welcome id ="IdWelcome" runat ="server" EnableViewState ="false" ></ wssuc:Welcome >
<!-- 可选项,SiteAction那个按钮的控件 -->
< SharePoint:SiteActions runat ="server" AccessKey ="<%$Resources:wss,tb_SiteActions_AK%>" id ="SiteActionsMenuMain"
PrefixHtml ="<div><div>"
SuffixHtml ="</div></div>"
MenuNotVisibleHtml ="&nbsp;" >
< CustomTemplate >
< SharePoint:FeatureMenuTemplate runat ="server"
FeatureScope ="Site"
Location ="Microsoft.SharePoint.StandardMenu"
GroupId ="SiteActions"
UseShortId ="true"
>
< SharePoint:MenuItemTemplate runat ="server" id ="MenuItem_Create"
Text ="<%$Resources:wss,viewlsts_pagetitle_create%>"
Description ="<%$Resources:wss,siteactions_createdescription%>"
ImageUrl ="/_layouts/images/Actionscreate.gif"
MenuGroupId ="100"
Sequence ="100"
UseShortId ="true"
ClientOnClickNavigateUrl ="~site/_layouts/create.aspx"
PermissionsString ="ManageLists, ManageSubwebs"
PermissionMode ="Any" />
< SharePoint:MenuItemTemplate runat ="server" id ="MenuItem_EditPage"
Text ="<%$Resources:wss,siteactions_editpage%>"
Description ="<%$Resources:wss,siteactions_editpagedescription%>"
ImageUrl ="/_layouts/images/ActionsEditPage.gif"
MenuGroupId ="100"
Sequence ="200"
ClientOnClickNavigateUrl ="javascript:MSOLayout_ChangeLayoutMode(false);"
/>
< SharePoint:MenuItemTemplate runat ="server" id ="MenuItem_Settings"
Text ="<%$Resources:wss,settings_pagetitle%>"
Description ="<%$Resources:wss,siteactions_sitesettingsdescription%>"
ImageUrl ="/_layouts/images/ActionsSettings.gif"
MenuGroupId ="100"
Sequence ="300"
UseShortId ="true"
ClientOnClickNavigateUrl ="~site/_layouts/settings.aspx"
PermissionsString ="EnumeratePermissions,ManageWeb,ManageSubwebs,AddAndCustomizePages,ApplyThemeAndBorder,ManageAlerts,ManageLists,ViewUsageData"
PermissionMode ="Any" />
</ SharePoint:FeatureMenuTemplate >
</ CustomTemplate >
</ SharePoint:SiteActions >
<!-- 可选项,设计状态下的Console -->
< asp:ContentPlaceHolder ID ="WSSDesignConsole" runat ="server" >
< wssuc:DesignModeConsole id ="IdDesignModeConsole" runat ="server" />
</ asp:ContentPlaceHolder >
<!-- 这个tag比较重要,它是设置Webpart的那个工具条,如果页面上不加上这个Tag,那个工具条就会生成在页面的最下端,从而破坏页面结构 -->
< PlaceHolder id ="MSO_ContentDiv" runat ="server" ></ PlaceHolder >
<!-- 必选项,这个就不用说了吧 -->
< asp:ContentPlaceHolder id ="PlaceHolderMain" runat ="server" ></ asp:ContentPlaceHolder >
< input type ="text" name ="__spDummyText1" style ="display:none;" size =1 />
< input type ="text" name ="__spDummyText2" style ="display:none;" size =1 />
<!-- 没用的PlaceHolder不要删除掉,因为有些页面会把东西输出到这些PlaceHolder的,少一个都可能会出错,把他隐藏就行 -->
< div style ="display:none" >
< asp:ContentPlaceHolder id ="PlaceHolderUtilityContent" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderBodyAreaClass" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderTitleAreaClass" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderGlobalNavigationSiteMap" runat ="server" >
< asp:SiteMapPath SiteMapProvider ="SPSiteMapProvider" id ="GlobalNavigationSiteMap" RenderCurrentNodeAsLink ="true" SkipLinkText ="" NodeStyle-CssClass ="ms-sitemapdirectional" runat ="server" />
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderGlobalNavigation" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderSiteName" runat ="server" >
< SharePoint:SPLinkButton runat ="server" NavigateUrl ="~site/" id ="onetidProjectPropertyTitle" >
< SharePoint:ProjectProperty Property ="Title" runat ="server" />
</ SharePoint:SPLinkButton >
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderSearchArea" runat ="server" >
< SharePoint:DelegateControl runat ="server" ControlId ="SmallSearchInputBox" />
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderHorizontalNav" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderTopNavBar" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder ID ="SPNavigation" runat ="server" >
< SharePoint:DelegateControl runat ="server" ControlId ="PublishingConsole"
PrefixHtml ="<tr><td colspan="4" id="mpdmconsole" class="ms-consolemptablerow">"
SuffixHtml ="</td></tr>" >
</ SharePoint:DelegateControl >
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderPageImage" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderTitleLeftBorder" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderTitleBreadcrumb" runat ="server" >
< asp:SiteMapPath SiteMapProvider ="SPContentMapProvider" id ="ContentMap" SkipLinkText ="" NodeStyle-CssClass ="ms-sitemapdirectional" runat ="server" />
</ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderPageTitleInTitleArea" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderMiniConsole" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderTitleRightMargin" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderLeftNavBarDataSource" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderCalendarNavigator" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderLeftNavBarTop" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderLeftNavBar" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderTitleAreaSeparator" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderLeftActions" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderNavSpacer" runat ="server" ></ asp:ContentPlaceholder >
< asp:ContentPlaceHolder id ="PlaceHolderLeftNavBarBorder" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderBodyLeftBorder" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderPageDescription" runat ="server" />
< asp:ContentPlaceHolder id ="PlaceHolderBodyRightMargin" runat ="server" ></ asp:ContentPlaceHolder >
< asp:ContentPlaceHolder id ="PlaceHolderFormDigest" runat ="server" >
< SharePoint:FormDigest runat =server />
</ asp:ContentPlaceHolder >
</ div >
</ form >
</ BODY >
</ HTML >
PS:其实有一些Sharepoint自带的控件是很好用的,希望大家能发掘出来
这个模板是基于Blank site那个模板加工的,如果是MOSS里的Publish模板那者一些特殊的模板可能还要加点东西上去。
希望这个能为大家带来帮助。
有问题可以联系我的Email或者留言,我会尽量做到有问必复的。
Email: ou.jasmine@gmail.com