为 MDS 修改 SharePoint 2013组件
了解如何修改 SharePoint 项目中的组件以在 SharePoint 2013 中利用最少下载策略(MDS).
本文内容
为何修改 SharePoint 组件?
母版页
ASP.NET 页面
控件和 Web 部件
其他资源
最少下载策略 (MDS) 通过仅从服务器返回在浏览器中正确呈现页面所需的页面部分来改善用户体验。由于完全呈现的页面不会返回到客户端,因此服务器必须能够准确识别呈现页面所需的部分。您可能需要修改 SharePoint 项目中的组件,以便标识为 MDS 兼容,并与 MDS 引擎一起工作。请参阅最少下载策略概述了解有关 MDS 的详细信息。
如最少下载策略概述中所述,无论您是否修改 SharePoint 控件以充分利用 MDS,控件都会正常工作。但是,如果您的组件与 MDS 不兼容,MDS 引擎会发出故障转移。在故障转移中,MDS 引擎会进行额外的往返过程来将浏览器重定向到新页面的完整版本。如果您修改组件以与 MDS 一起工作并避免每次在 SharePoint 中浏览到新页面时出现故障转移,用户将获得最佳体验。您通常需要修改母版页、ASP.NET 页、控件和 Web 部件。
母版页提供了一个模板,可让 MDS 在用户导航到新页面时识别可能需要更新的内容区域。优化性能时,优化母版页是要采取的最重要步骤之一,因为母版页可识别需要更新内容的部分。SharePoint 中包含的 Seattle.master 母版页是经优化母版页的很好示例。图 1 显示了 Seattle.master 母版页中会根据页面不同而变化的组件示例,如 (1) 主内容区域、(2) 左侧导航栏和 (3) 页面标题。
图 1. 母版页中需要更新的组件

注释
Seattle.master 母版页中还有很多组件会根据页面不同而变化,如样式表和 JavaScript 文件。图 1 仅显示了少数示例。
优化母版页中的组件有不同模式。您可以对以下组件使用一个模式:
HTML 区域和控件
样式表
JavaScript 文件
页面标题
如果 HTML 区域和控件封装在 SharePoint:AjaxDelta 标记内,则与 MDS 兼容。将内容封装在 SharePoint:AjaxDelta 标记内表示 MDS 引擎应更新封装的控件和 HTML。如果控件或 HTML 部分在页面之间没有变化,则不应发送到客户端。因此,您应将这些控件保留在 AjaxDelta 标记以外。在图 1 所示的 Seattle.master 母版页中,(1) 主内容区域封装在 AjaxDelta 标记内,如下所示。
<SharePoint:AjaxDelta
id="DeltaPlaceHolderMain"
BlockElement="true"
IsMainContent="true"
runat="server">
<a id="mainContent" name="mainContent" tabindex="-1"></a>
<asp:ContentPlaceHolder id="PlaceHolderMain" runat="server" />
</SharePoint:AjaxDelta>
AjaxDelta 模式的另一个示例是图 1 中的 (2) 左侧导航栏。以下代码显示了该控件如何与其他大量控件和 HTML 封装在 AjaxDelta 标记内。
<SharePoint:AjaxDelta
id="DeltaPlaceHolderLeftNavBar"
BlockElement="true"
CssClass="ms-core-navigation"
role="navigation"
runat="server">
<asp:ContentPlaceHolder id="PlaceHolderLeftNavBar" runat="server">
<a id="startNavigation" name="startNavigation" tabIndex="-1"></a>
<asp:ContentPlaceHolder id="PlaceHolderLeftNavBarTop" runat="server" />
<asp:ContentPlaceHolder id="PlaceHolderQuickLaunchTop" runat="server" />
<asp:ContentPlaceHolder id="PlaceHolderLeftNavBarDataSource" runat="server" />
<asp:ContentPlaceHolder id="PlaceHolderCalendarNavigator" runat="server" />
<asp:ContentPlaceHolder id="PlaceHolderLeftActions" runat="server" />
<!-- There are more controls and HTML in this placeholder in the Seattle master page -->
</asp:ContentPlaceHolder>
</SharePoint:AjaxDelta>
要记住的有关 AjaxDelta 标记的最后一点是标记不能嵌套。您应在母版页结构中的最高要求级别指定 AjaxDelta 标记。
图 1 中的最后一个示例是 (3) 页面标题,该组件需要使用 SharePoint:PageTitle 标记的特殊模式。以下代码显示了 Seattle.master 母版页中使用的 PageTitle标记。
<SharePoint:PageTitle runat="server">
<asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server">
<SharePoint:ProjectProperty Property="Title" runat="server" />
</asp:ContentPlaceHolder>
</SharePoint:PageTitle>
您的母版页也可以包含样式表和 JavaScript 文件。服务器引擎需要根据需要识别 CSS 和 JavaScript 文件。若要根据需要识别 CSS 文件资源,请使用以下模式。
<SharePoint:CssLink runat="server" Version="15"/>
<SharePoint:CssRegistration Name="my_styles.css" runat="server" />
请注意,每个母版页只能有一个 CssLink 标记,但可以有很多 CssRegistration 标记,因此您可以添加大量 CSS 文件。对于 JavaScript 文件,请使用以下模式。
<SharePoint:ScriptLink language="javascript" name="my_javascript.js" runat="server" />
包含使用 HTML style 和 script 标记的 CSS 和 JavaScript 文件在 MDS 中不受支持。
如果您的项目包含 ASP.NET 页面,可能需要引用 CSS 和 JavaScript 文件。HTML style 和 script 标记与 MDS 不兼容。然而,可以使用前一部分中介绍的CssRegistration 和 ScriptLink 模式。
您的 ASP.NET 页面还可以使用 Response.Output 方法将内容写入页面,MDS 不允许此方法。然而,您可以使用以下 SPHttpUtility 类的 MDS 兼容方法。
WriteNoEncode()
WriteHtmlEncode()
WriteEcmaScriptStringLiteralEncode()
WriteHtmlEncodeAllowSimpleTextFormatting()
WriteHtmlUrlAttributeEncode()
WriteUrlKeyValueEncode()
WriteUrlPathEncode()
除了引用 JavaScript 文件,您的 ASP.NET 页面还可以具有内嵌 JavaScript 代码。使用以下模式以让脚本块与 MDS 兼容。
<SharePoint:ScriptBlock runat="server" >
// Your JavaScript code here.
</SharePoint:ScriptBlock>
您还需要将控件和 Web 部件标记为 MDS 兼容。以下代码显示了要使用的模式。
[assembly: Microsoft.SharePoint.WebControls.MdsCompliantAttribute(IsCompliant = true)]
namespace VisualWebPartProject2.VisualWebPart1
{
// Rest of your control logic
此外,您的控件和 Web 部件需要使用 SPPageContentManager 类中的方法注册资源。最常见资源是 JavaScript 代码段和隐藏文件,可以分别使用RegisterClientScriptBlock 和 RegisterHiddenField 注册。
您的控件和 Web 部件还可以使用 XSLT 文件来控制呈现过程。您的 XSLT 文件可以具有嵌入式 JavaScript 代码或文件。MDS 引擎需要知道这些资源。您可以使用名为 pcm 的 XSLT 扩展对象注册 JavaScript 资源。如何使用 pcm 对象的一个很好示例是用于 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\LAYOUTS\XSL\fldtypes.xsl 文件中。以下代码显示了 fldtypes.xsl 文件如何使用 pcm 对象来注册 JavaScript 资源。
<xsl:value-of select="pcm:RegisterScriptBlock(concat('block1',$ViewCounter), string($scriptbody1))"/>
<xsl:value-of select="pcm:RegisterScriptLink('/_layouts/15/wssactionmenu.js')"/>
为 MDS 修改 SharePoint 2013组件的更多相关文章
- 修改SharePoint 2013中Search Topology时遇到的一些问题以及一些Tips
这次操作在笔者的场中涉及到5台服务器, CA, APP2, APP3, APP4, APP5. 原本只有CA运行着Search Service Applicaiton, 现在想让APP2-5运行这项服 ...
- 修改SharePoint 2013中item Created by 信息
因为公司的系统有点小bug.额,要做点坏事,把系统没记上的东西偷偷补上去,但是item的created by变成了我(这怎么行,不能让别人知道我做了坏事,一定是隔壁小李干的! 懒得开visual st ...
- 批量修改sharepoint 2013站点里区域设置
cls [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") foreach ($we ...
- SharePoint 2013中以其他用户身份登录的WebPart(免费下载)
在SharePoint 2013中微软并没有提供在SharePoint 2010中以其他用户身份登录的菜单,这对一般用户影响不大,但对于系统管理员或测试人员或特定人员(如在OA系统中的文员或秘书,常常 ...
- SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)
前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...
- SharePoint 2013 入门教程之创建及修改母版页
在SharePoint 2013中,微软提供了根据HTML页面转换Master页的方法,并支持单项同步,但是这样的更新,并不完善,会使一些功能造成丢失,所以,了解Master结构的人,尽量直接去修改M ...
- SharePoint 2013必备组件离线包安装:AppFabric无法安装问题解决
由于没有网络,无法使用sharepoint2013的安装必备软件的在线下载向导安装,当要安装 SharePoint 2013 的服务器与 Internet 隔离时,通常需要从脱机位置安装必备组件.即使 ...
- SharePoint 2013 母版页修改后,无法添加应用程序
原文:SharePoint 2013 母版页修改后,无法添加应用程序 问题描述:前一段时间尝试了一下将HTML文件转换为母版页,但是,用着用着又发现新的问题,我们转换的母版页,设置成默认母版页以后,无 ...
- Windows Server2012R2 安装 SharePoint 2013 的必备组件
Windows Server2012R2目前支持SharePoint Server 2013 with Service Pack 1 和 SharePoint Foundation 2013 with ...
随机推荐
- java之Maven配置和springMvc的简单应用
初始springMvc这个框架,非常的陌生,而且幸好公司是通过maven这个代码管理工具,可以随时添加依赖.解决了很多问题在以后深入开发中. 项目结构: 通过结构中,pom.xml这个文件其实就说明这 ...
- [Node.js] Node.js项目的持续集成
原文地址:http://www.moye.me/2016/03/03/nodejs_ci_by_jenkins 引子 持续集成 (Continuous Integration,简称CI)是一种软件工程 ...
- MySQL ibdata1文件迁移
目的:主机系统/var目录快满了,经查询最大的文件是mysql的ibdata1文件,有17G大小,故需要迁移这个文件到其他目录下,以释放/var目录空间. 1.先备份下数据库是个好习惯 # mysql ...
- iOS_UIImage_图片剪切
- (UIImage *)imagecutWithRect:(CGRect)rect { CGImageRef subImageRef = CGImageCreateWithImageInRect(s ...
- [git]merge和rebase的区别
前言 我从用git就一直用rebase,但是新的公司需要用merge命令,我不是很明白,所以查了一些资料,总结了下面的内容,如果有什么不妥的地方,还望指正,我一定虚心学习. merge和rebase ...
- js每天进步一点点2
JS之图片的切换效果
- Android中Services之异步IntentService
IntentService:异步处理服务,新开一个线程:handlerThread在线程中发消息,然后接受处理完成后,会清理线程,并且关掉服务. IntentService有以下特点: (1) 它创 ...
- Ubuntu14.04安装JDK
下载oracle jdk包 从oracle官网下载jdk包,请选择Linux的tar包: 如果想使用命令行下载工具进行下载,可以先获得下载地址,然后运行curl进行下载: curl -L -O -H ...
- 【转】C#类似Jquery的html解析类HtmlAgilityPack基础类介绍及运用
Html Agility Pack下载地址:http://htmlagilitypack.codeplex.com/ Html Agility Pack 源码中的类大概有28个左右,其实不算一个很复杂 ...
- 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)
本文讲述使用Senparc.Weixin框架来快速处理各种接收事件推送.这里的消息指的是传统的微信公众平台消息交互,微信用户向公众号发送消息后,公众号回复消息给微信用户.包括以下类型: 1 subsc ...