为 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 ...
随机推荐
- Shader 简明入门教程
Unity3D的所有渲染工作都离不开着色器(Shader),如果你和我一样最近开始对Shader编程比较感兴趣的话,可能你和我有着同样的困惑:如何开始?Unity3D提供了一些Shader的手册和文档 ...
- MySQL(Navicat)运行.sql文件时报错:[Err] 2006 - MySQL server has gone away 的解决方法
背景: 今天导入一个数据量很大的.sql文件时,报错: 原因: 可能是sql语句过长,超过mysql通信缓存区最大长度. 解决:1. 编辑 MySQL 安装目录下的 my.ini,在最后添加以下内容: ...
- PHP类和对象函数实例详解
1. interface_exists.class_exists.method_exists和property_exists: 顾名思义,从以上几个函数的命名便可以猜出几分他们的功能.我想这也是我随着 ...
- Azure ARM (2) 概览
<Windows Azure Platform 系列文章目录> http://files.cnblogs.com/files/threestone/AzureResourceManager ...
- javascrpt插入html中中文字符乱码问题记录
问题就是我使用js做这么个事情: var description = [ '你好', '你好', '你好', '你好' ]; var link = ''; var logLink = ''; ; i ...
- 【Swift学习】Swift编程之旅---函数(十)
函数是一组用于执行特定任务的独立的代码段,你用一个名字来标识函数,这个名字是用来“调用”函数来执行它的任务. swift统一函数的语法具有足够的灵活性来表达任何一个简单的不带参数的名称与本地和外部的每 ...
- ASP.NET MVC系列:添加模型
模型(Model)是应用程序中用于处理应用程序数据逻辑的部分;通常模型对象在数据库中存取数据 添加模型类 在解决方案中右击Models文件夹,然后选择“添加”,在“添加”项里选择“类”:或者选中Mod ...
- winform时钟c#代码
代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- asp.net开发与web标准的冲突问题
Visual Studio .net从2003到现在的2008,一路走来慢慢强大……从以前的vs2003能自动改乱你的html代码到现在在vs2008中都能直接对html代码进行w3c标准验证并提示了 ...
- opencart二次开发小记
在controller中如果要调用model中数据或说方法可以这样写 $this->load->model('catalog/information');//model中的informat ...