使用 WPSC 进行客户端编程

上次修改时间: 2015年3月9日

适用范围: SharePoint Foundation 2010

本文内容
名称冲突
使用令牌
使用 varPart 和 WebPart 引用 Web 部件
表单中的元素引用

Web 部件页服务组件 (WPSC) 是一种对象模型,可用于对 Web 部件页及其包含的 Web 部件进行脚本编写。当客户端首次访问 Web 部件页时,系统会将 WPSC 组件添加到客户端计算机中。该组件适用于从 Microsoft.SharePoint.WebPartPages.WebPart 类派生的 Web 部件,而不适用于从 ASP.NET 的 System.Web.UI.WebControls.WebParts.WebPart 类派生的 Web 部件。

名称冲突

通过 WPSC 编写脚本时,可使用唯一的命名空间或令牌来避免名称冲突。您可以将这些命名空间或令牌用于 Web 部件事件、名称、消息和状态,从而有效避免命名冲突。呈现页面时,您还可以使用 SharePoint Foundation Web 部件基础结构提供的变量和元素。

使用令牌

令牌是一些值的占位符,可在运行时确定这些值。您可以将预定义令牌附加到代码中的已命名实体,以便简化脚本编写并避免命名冲突。呈现时,SharePoint Foundation Web 部件基础结构将使用相应的值替换令牌,直到所有页面的所有令牌替换完毕。令牌不区分大小写,并且可出现于名称中的任何位置(即,可作为变量的前缀、后缀或中间部分)。

令牌替换可以更有效地避免名称冲突。设计时,您可以向 Web 部件名称、嵌入内容或链接内容中添加令牌。运行时,Web 部件基础结构将使用生成的值替换添加的令牌,以确保所涉及项目的名称唯一。例如,您可以将 _WPQ_ 作为前缀添加到 HTML ID 及函数名中。呈现时,Web 部件基础结构会将此文本字符串转换为 WebPartQualifier 属性

下表按字母顺序列出了预定义令牌。

令牌名称

替换值

_LogonUser_

从 ASPX 页的 Request.ServerVariables("LOGON_USER") 检索到的值。此值通常包含客户端的域和用户名,可用于在 Intranet 中对用户进行标识。

_WPID_

以 g_ 格式表示的 Web 部件实例的 GUID(如 g_632c887a_20ba_4e6d_98eb_7404ee4841f)。此令牌在页面内提供了唯一 ID。

_WPQ_

Web 部件页中 Web 部件的唯一 ID。可使用此令牌来限定 HTML ID 和脚本函数名称,以避免名称冲突。

_WPR_

服务器(而非客户端)上 Web 部件的资源文件夹的 URL。

使用 varPart 和 WebPart 引用 Web 部件

呈现 Web 部件页时,WebPartPage Web 服务会为 Web 部件分配变量和元素标识符。将这些变量和元素标识符与客户端脚本中的令牌结合使用,可让 Web 部件对自身进行引用。

varPart

在 Web 部件页加载过程即将结束时,Web 部件页的每个 Web 部件都会被分配一个变量(如 varPartWPQ1 )。此变量指向 Web 部件的 WPSC 部件对象。Web 部件可通过此变量在使用 _WPQ_ 令牌的嵌入内容中对自身进行引用。虽然可以对变量进行硬编码(例如,在代码中引用 varPartWPQ2 而非 varPart_WPQ_),但如果 Web 部件限定符发生更改,您仍将遇到困难。无法保证在 Web 部件页发生更改时,Web 部件的限定符能够保持不变。添加和重命名 Web 部件都会影响存储中的部件顺序,进而影响到 Web 部件限定符和 _WPQ_ 令牌表示的值。如果可能,最好使用 _WPQ_ 令牌。

WebPart

加载 Web 部件页时,Web 部件在页面上呈现为 DIV 元素。Web 部件基础结构会为此元素指定一个标识符(如 WebPartWPQ1)。通过将 WebPart 和 _WPQ_ 令牌进行组合,您可以使用该标识符来处理 Web 部件的 HTML DOM。这样,Web 部件即可使用 WebPart_WPQ_ 来引用自身的 HTML 结构。对 Web 部件页的 HTML DOM 进行处理时要谨慎,因为更改 Web 部件的 DOM 结构或者 Web 部件页本身的 DOM 结构会影响浏览器的行为。WebPart_WPQ_ 最安全且最常见的用途是处理 Web 部件或其所含元素的 InnerHTML。您可以使用脚本生成的数据来更新 InnerHTML。

表单中的元素引用

Web 部件页中的所有 Web 部件都包含在表单中,原因是 Web 部件页实质上是 ASPX 页。HTML 要求表单中的各项元素都要使用表单 ID 作为前缀,或者使用 document.all 进行引用。下面是一个简短的示例:

<form id="MyForm">
<input type="text" id="MyText">
<input type="button" id="MyButton" onclick="buttonClicked">

<script>
function buttonClicked()
{
   MyForm.MyText.value="Hello World!";
}
</script>
</form>

另外,该函数中的代码行还可以如下表示:

document.all("MyText").value="Hello World!";

这两种方法都是可接受的。

备注

只有在使用 <INPUT> 标记时才会出现问题。

请参阅

概念

标准系统事件支持

WPSC 数据流

WPSC 服务

其他资源

Web 部件页服务组件 (WPSC) 对象模型