如何:自定义移动页上的字段呈现
上次修改时间: 2011年2月2日
适用范围: SharePoint Foundation 2010
本主题概述自定义移动设备可访问的 Microsoft SharePoint Foundation 页上字段呈现的基本过程。有关详细的过程演练,请参阅演练:自定义移动表单上的项目标题和演练:为移动页面创建自定义字段呈现控件。
列表视图页或表单上的字段呈现始终先呈现该页正文(内容)区域中的 SPMobilePageContents 对象。如移动页呈现系统中所述,此对象会启动调用链,从而最终导致调用呈现移动页相应区域的 RenderingTemplate 对象。它几乎始终为具有分段 ID 的 RenderingTemplate。如果找不到名称匹配的 RenderingTemplate,则使用默认模板。这表示您可以自定义字段呈现,具体方法是创建一个运行库可找到其 ID 的 RenderingTemplate。
具体而言,运行库会查找具有格式为 MobileCustomListField_ListTypeID_FieldType_Field 的 ID 的 RenderingTemplate。
这些占位符(ListTypeID、FieldType 和 Field)已在呈现模板分段 ID 中进行定义。
如果不存在具有所查找 ID 的 RenderingTemplate,则使用具有 ID MobileDefaultListField 的 RenderingTemplate。
现有 RenderingTemplate
以下列表标识在安装 SharePoint Foundation 时 MobileDefaultTemplates.ascx 或 GwbMobileDefaultTemplates.ascx 中已存在的用于字段呈现的 RenderingTemplate。
MobileCustomListField_Contacts_Text_WorkZip
MobileCustomListField_PictureLibrary_Computed_ImageSize
MobileCustomListField_Posts_DateTime_PublishedDate
MobileCustomListField_Events_UserMulti_ParticipantsPicker
MobileCustomListField_CallTrack_DateTime_CallTime
MobileCustomListField_CallTrack_Computed_RefDetail
MobileCustomListField_Whereabouts_User_Name
您不能修改 MobileDefaultTemplates.ascx 或 GwbMobileDefaultTemplates.ascx 文件。您可以(在自己的 .ascx 文件中)创建同名的新 RenderingTemplate 元素,但这可能会中断在部署 SharePoint Foundation 时安装的、且依赖于原始同名 RenderingTemplate 元素的其他解决方案。
备注
SharePoint Foundation 附带的 RenderingTemplate 将在自定义呈现模板加载之前加载,因此当同名自定义呈现模板作为现有呈现模板之一加载时,它将替代原始模板。如果多个自定义 RenderingTemplate 元素同名,则其文件名称按字母顺序排在最后一位的元素将替代所有其他元素。如果特定文件具有两个或更多个同名的此类模板,则不会加载任何一个元素。
此外,已存在一个具有 ID MobileDefaultListField 的默认 RenderingTemplate 元素。如果未定义当前列表和字段的 RenderingTemplate,则运行时将使用该元素。如果您使用此名称创建一个新 RenderingTemplate,则会面临相同的风险。
自定义移动列表视图或表单页的某个部分
在 Microsoft Visual Studio 中,创建一个"空白 SharePoint 项目"。将其设置为服务器场解决方案,而不是沙盒解决方案。
向 TEMPLATE\ControlTemplates 中添加一个"SharePoint 映射文件夹"。
右键单击新文件夹,并添加一个 SharePoint"用户控件"。为该 .ascx 文件命名,使其与其他解决方案提供程序的名称区分开。例如 ContosoMobileRenderingTemplates.ascx。Visual Studio 会自动将该文件添加到 SharePoint 解决方案清单中,并将其设置为部署到 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\ControlTemplates。
提示 不要通过右键单击"解决方案资源管理器"中的项目 来添加该"用户控件"。当通过这种方式添加"用户控件"时,Visual Studio 会将其放在 TEMPLATE\ControlTemplates 的子文件夹中;如果该控件未移动,则 Visual Studio 会将其部署到 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\ControlTemplates 的相应子文件夹中。不会加载子文件夹中的移动呈现模板。
删除 .ascx.cs 和 .ascx.designer.cs(或 .ascx.vb 和 .ascx.designer.vb)文件。此项目不需要它们。
将 .ascx 文件的整个指令部分替换为以下标记。
<%@ Register TagPrefix="GroupBoardMobile" Namespace="Microsoft.SharePoint.Applications.GroupBoard.MobileControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Control Language="C#" %> <%@ Assembly Name="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %> <%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register TagPrefix="SPMobile" Namespace="Microsoft.SharePoint.MobileControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register TagPrefix="WPMobile" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
将呈现模板添加到 .ascx 文件,并为其指定以下格式的 ID:MobileCustomListField_ListTypeID_FieldType_Field。
ListTypeID 是当前列表类型的 ID 号(如 105)或 SPListTemplateType 枚举的值之一(如 Contacts)。
FieldType 是字段的数据类型,而 Field 是该字段的内部名称的名称。有关哪些内容可替换这些占位符的详细信息,请参阅移动页呈现系统。
您的呈现模板可以直接声明可呈现控件(如 Label 控件),也可以声明从 SPMobileBaseFieldControl 派生的类的呈现控件。
在"生成"菜单上,选择"部署解决方案"。这将自动保存 .ascx 文件,将其部署到 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\ControlTemplates,并回收 Web 应用程序,以便重新加载该文件夹中的所有 .ascx 文件。
示例
以下 RenderingTemplate 定义的示例演示如何为"Announcements"列表中的项目创建一个新的"Title"字段。有关详细示例,请参阅演练:自定义移动表单上的项目标题和演练:为移动页面创建自定义字段呈现控件。
<SharePoint:RenderingTemplate RunAt="Server" ID="MobileCustomListField_Announcements_Text_Title" >
<Template>
<mobile:Label Text="Title field in Announcements List" RunAt="Server" />
</Template>
</SharePoint:RenderingTemplate>