了解如何修改 SharePoint 项目中的组件以在 SharePoint 2013 中利用最少下载策略(MDS).

 

本文内容
为何修改 SharePoint 组件?
母版页
ASP.NET 页面
控件和 Web 部件
其他资源

最少下载策略 (MDS) 通过仅从服务器返回在浏览器中正确呈现页面所需的页面部分来改善用户体验。由于完全呈现的页面不会返回到客户端,因此服务器必须能够准确识别呈现页面所需的部分。您可能需要修改 SharePoint 项目中的组件,以便标识为 MDS 兼容,并与 MDS 引擎一起工作。请参阅最少下载策略概述了解有关 MDS 的详细信息。

为何修改 SharePoint 组件?


最少下载策略概述中所述,无论您是否修改 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 标记内,如下所示。

C#

                      <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 标记内。

C#

                      <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标记。

C#

<SharePoint:PageTitle runat="server">
<asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server">
<SharePoint:ProjectProperty Property="Title" runat="server" />
</asp:ContentPlaceHolder>
</SharePoint:PageTitle>

您的母版页也可以包含样式表和 JavaScript 文件。服务器引擎需要根据需要识别 CSS 和 JavaScript 文件。若要根据需要识别 CSS 文件资源,请使用以下模式。

C#

<SharePoint:CssLink runat="server" Version="15"/>
<SharePoint:CssRegistration Name="my_styles.css" runat="server" />

请注意,每个母版页只能有一个 CssLink 标记,但可以有很多 CssRegistration 标记,因此您可以添加大量 CSS 文件。对于 JavaScript 文件,请使用以下模式。

C#

<SharePoint:ScriptLink language="javascript" name="my_javascript.js" runat="server" />

包含使用 HTML style 和 script 标记的 CSS 和 JavaScript 文件在 MDS 中不受支持。

ASP.NET 页面


如果您的项目包含 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 兼容。

C#

<SharePoint:ScriptBlock runat="server" >
// Your JavaScript code here.
</SharePoint:ScriptBlock>

控件和 Web 部件


您还需要将控件和 Web 部件标记为 MDS 兼容。以下代码显示了要使用的模式。

C#

[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 资源。

XML

<xsl:value-of select="pcm:RegisterScriptBlock(concat('block1',$ViewCounter), string($scriptbody1))"/>
<xsl:value-of select="pcm:RegisterScriptLink('/_layouts/15/wssactionmenu.js')"/>

为 MDS 修改 SharePoint 2013组件的更多相关文章

  1. 修改SharePoint 2013中Search Topology时遇到的一些问题以及一些Tips

    这次操作在笔者的场中涉及到5台服务器, CA, APP2, APP3, APP4, APP5. 原本只有CA运行着Search Service Applicaiton, 现在想让APP2-5运行这项服 ...

  2. 修改SharePoint 2013中item Created by 信息

    因为公司的系统有点小bug.额,要做点坏事,把系统没记上的东西偷偷补上去,但是item的created by变成了我(这怎么行,不能让别人知道我做了坏事,一定是隔壁小李干的! 懒得开visual st ...

  3. 批量修改sharepoint 2013站点里区域设置

    cls [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") foreach ($we ...

  4. SharePoint 2013中以其他用户身份登录的WebPart(免费下载)

    在SharePoint 2013中微软并没有提供在SharePoint 2010中以其他用户身份登录的菜单,这对一般用户影响不大,但对于系统管理员或测试人员或特定人员(如在OA系统中的文员或秘书,常常 ...

  5. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...

  6. SharePoint 2013 入门教程之创建及修改母版页

    在SharePoint 2013中,微软提供了根据HTML页面转换Master页的方法,并支持单项同步,但是这样的更新,并不完善,会使一些功能造成丢失,所以,了解Master结构的人,尽量直接去修改M ...

  7. SharePoint 2013必备组件离线包安装:AppFabric无法安装问题解决

    由于没有网络,无法使用sharepoint2013的安装必备软件的在线下载向导安装,当要安装 SharePoint 2013 的服务器与 Internet 隔离时,通常需要从脱机位置安装必备组件.即使 ...

  8. SharePoint 2013 母版页修改后,无法添加应用程序

    原文:SharePoint 2013 母版页修改后,无法添加应用程序 问题描述:前一段时间尝试了一下将HTML文件转换为母版页,但是,用着用着又发现新的问题,我们转换的母版页,设置成默认母版页以后,无 ...

  9. Windows Server2012R2 安装 SharePoint 2013 的必备组件

    Windows Server2012R2目前支持SharePoint Server 2013 with Service Pack 1 和 SharePoint Foundation 2013 with ...

随机推荐

  1. struts学习

    1.集成tomcat到eclipse http://www.eclipsetotale.com/tomcatPlugin.html 下载最新的plug后,解压.解压后的文件放到eclipse的plug ...

  2. JavaScript垃圾回收(三)——内存泄露

    一.JavaScript内存监测工具 在讨论内存泄露之前,先介绍几款JavaScript内存监测工具. IE的sIEve与JSLeaksDetector(这两个可以在下面的附件中下载),firefox ...

  3. 12个来自 Codrops 的创新交互和动画效果

    产品的用户体验是否被用户所接受,很大一部分取决于交互界面的设计,交互界面设计是整个产品设计中的核心,对于产品品质有着决定性的影响.这里集合了12个来自 Codrops 的创新的界面交互和动画效果,值得 ...

  4. 碉堡了! 纯 CSS 绘制《辛普森一家》人物头像

    这篇文章给大家分享一组纯 CSS 绘制的<辛普森一家>人物头像.<辛普森一家>(The Simpsons)是马特·格勒宁为美国福克斯广播公司创作的一部动画情景喜剧.该剧通过对霍 ...

  5. 在java中使用redis

    在java中使用redis很简单,只需要添加jedist.jar,通过它的api就可以了.而且,api和redis的语法几乎完全相同.以下简单的测试: 参考:http://www.runoob.com ...

  6. Asp.net 加密解密类

    namespace Wedn.Net { /// <summary> /// EncryptHelper 来′自? wedn.net /// </summary> public ...

  7. Chrome开发者工具详解(3)-Timeline面板

    Chrome开发者工具详解(3)-Timeline面板 注: 这一篇主要讲解面板Timeline,参考了Google的相关文档,主要用于公司内部技术分享.. Timeline面板 Timeline面板 ...

  8. JQuery01

    一:JQuery 1 JQuery知识 *:就是让我们学会调用JQ插件,其实内部就是对JS的封装. *:jquery里面有三个文件, 第2个和第3个其实里面的内容是一样的,只是第三个对其进行了压缩,使 ...

  9. DirectShow .Net 实现视频

    DirectShow .Net 实现视频 .获取视频采集设备IBaseFilter接口对象的方法 //获取所有视频设备名称 public ArrayList GetVideoInputDevice() ...

  10. jquery的promise实践--连续加载图片

    在javascript设计模式实践之代理模式--图片预加载中用代理模式实现了图片预加载功能. 现在就更进一步,完成一个能够一张一张的连续图片加载的功能. 功能: 1.一张一张加载图片. 2.加载错误, ...