托管对象模型和 ECMAScript 对象模型的区别

上次修改时间: 2010年7月15日

适用范围: SharePoint Foundation 2010

在 SharePoint Online 中提供

您应该清楚 ECMAScript(JavaScript、JScript) 客户端对象模型和托管客户端对象模型之间的以下重要区别。

  • 方法签名可能不同,就像 ClientContext() 构造函数 (JavaScript: ClientContext(serverRelativeUrl)) 一样。在 JavaScript 中,此构造函数采用相对于服务器的 URL,但其托管版本使用完整的 URL 或 Uri

  • 两种对象模型使用不同的数据值类型。JavaScript 对象模型没有对应于 .NET Framework 托管对象模型中的所有数据值类型的等效项。JavaScript 将 StringCollection 视为 string[]。另一方面,JavaScript 具有一些 .NET Framework 没有的值,例如,NaN、负无穷或正无穷。

  • JavaScript 对象模型允许表单身份验证,但您无法指定用于连接服务器的身份验证机制。有关托管客户端对象模型和表单身份验证的详细信息,请参见托管客户端对象模型中的身份验证

  • 当您创建某个项并将其添加到现有集合中时,在查询未完成的情况下无法对该集合执行后续更新。此问题与向集合中添加项相关;否则,多个客户端可以同时读取和写入集合内的现有项。

  • 作为常规安全的一部分,不能使用页面上的 JavaScript 对象模型来处理 Microsoft SharePoint Foundation 2010 数据,除非页面包含格式摘要控件,例如,<SharePoint:FormDigest runat="server"/>。

  • 通常不能跨范围共享变量,因此,对 try/catch/finally 语句不能使用通用编码模式。

  • 在创建角色分配时使用的 RoleDefinitionBindingCollection 对象不具有对象标识。因此,如果创建一个新的 RoleDefinitionBindingCollection 对象,并在创建角色分配后尝试使用它,将返回一个错误。

  • 某些不区分大小写的比较在客户端上的工作方式与在服务器上的工作方式不相同。某些服务器端比较使用网站区域设置进行比较,但客户端只能使用固定的区域性来避免频繁的往返。如果服务器使用的是网站区域设置,则 SharePoint Foundation 2010 不支持不区分大小写的比较。

  • 由于异步回发的限制,您可能会发现,当页面处于某些模式时没有调用内嵌脚本,例如,当 Wiki 页处于编辑模式时。在这种情况下,使用 ScriptManager 控件及其 RegisterStartupScript() 方法注册一个启动脚本块以用于执行代码,而不是使用内嵌脚本。

请参阅

概念

数据检索概述

托管客户端对象模型中的身份验证

客户端对象模型分发和部署

常见编程任务

其他资源

客户端类库

ECMAScript 类库

使用 SharePoint Foundation 2010 托管客户端对象模型

客户端对象模型资源中心(该链接可能指向英文页面)