移动页呈现系统
上次修改时间: 2015年3月9日
适用范围: SharePoint Foundation 2010
本主题介绍 Microsoft SharePoint Foundation 如何使用 RenderingTemplate 控件和模板选择器控件来呈现可从移动设备访问的页面。
页面上的控件
虽然移动页是通过 RenderingTemplate 控件呈现的,但不能从该页直接调用这些控件。而 SPMobileComponent 控件或派生自 SPMobileComponent 的控件类型是在该页上声明的。此控件的 TemplateName 属性可用于指定 RenderingTemplate 的 ID。呈现模板是在位于 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES 的 ascx 文件中声明的。如果从 SPMobileComponent 派生的类的对象是在该页上声明的,则其 TemplateName 属性的值将在内部根据当前网站定义、当前页面类型和在其中声明此控件的页面的区域(页眉、内容或页脚)确定。如果已声明实际的 SPMobileComponent 对象,则可在此声明中指定 TemplateName 属性。
SharePoint Foundation 附带的 RenderingTemplate 控件是在 MobileDefaultTemplates.ascx 和 GbwMobileDefaultTemplates.ascx 中声明的。自定义 RenderingTemplate 在相同文件夹的自定义 .ascx 文件中声明的。
下面演示列表页 mbllists.aspx 移动列表的主标记。请注意,在某些位置(例如支持级联样式表 (CSS) 样式的设备使用的页面页眉区域)中,已声明 SPMobileComponent 并已明确设置其 TemplateName 属性。但在其他位置(例如不支持 CSS 的设备使用的页面页眉)中,已声明从 SPMobileComponent 派生的类的对象。在此情况下,此类为 SPMobilePageTitle。在该页上,它将使用 ID MobileHomePageTitle 调用呈现模板。
备注
移动"HomePage"页面类型包括实际上并非网站主页的页面。此类型包括不能完全归入其他类别的页面,如列表视图页或表单页。例如,移动"列表的列表"页 mbllist.aspx 的类型为 HomePage。
<SPMobile:SPMobileForm RunAt="Server" PageType="HomePage" Paginate="true">
<DeviceSpecific>
<Choice Filter="supportsCss">
<HeaderTemplate>
<SPMobile:SPMobileComponent RunAt="Server"Templatename="MobilePageTitleWithCss" Weightless="true" />
</HeaderTemplate>
<FooterTemplate>
<SPMobile:SPMobileComponent RunAt="Server"
Templatename="MobilePageNavigationWithCss" Weightless="true" />
</FooterTemplate>
</Choice>
<Choice>
<HeaderTemplate>
<SPMobile:SPMobileControlContainer RunAt="Server" Weightless="true">
<SPMobile:SPMobilePageTitle RunAt="Server" />
<SPMobile:SPMobileComponent RunAt="Server"
TemplateName="MobileDefaultSeparator" />
</SPMobile:SPMobileControlContainer>
</HeaderTemplate>
<FooterTemplate>
<SPMobile:SPMobileControlContainer RunAt="Server" Weightless="true">
<SPMobile:SPMobileComponent RunAt="Server"
Templatename="MobilePaginateNavigation" />
<SPMobile:SPMobileComponent RunAt="Server"
TemplateName="MobileDefaultSeparator" />
<SPMobile:SPMobilePageNavigation RunAt="Server" />
</SPMobile:SPMobileControlContainer>
</FooterTemplate>
</Choice>
</DeviceSpecific>
<SPMobile:SPMobilePageContents RunAt="Server" />
</SPMobile:SPMobileForm>
ASCX 文件内部
由页面上的控件调用的每个 RenderingTemplate 都有一个 Template 元素。Template 元素的内容通常符合以下其中一种模式的要求。
直接调用 ASP.NET Web 控件
在最简单的情况下,直接在 Template 元素中调用要插入移动页的 Microsoft ASP.NET Web 控件和 SharePoint Foundation Web 控件。例如,从几个 SharePoint Foundation 移动页的页眉和页脚区域调用 MobileDefaultSeparator RenderingTemplate。可以在 MobileDefaultTemplates.ascx 中通过以下标记进行定义。
<SharePoint:RenderingTemplate RunAt="Server" id="MobileDefaultSeparator">
<Template>
<mobile:Panel RunAt="Server" Alignment="Center" EnableViewState="False">
<mobile:DeviceSpecific RunAt="Server">
<Choice Filter="IsMicrosoftMobileExplorer">
<ContentTemplate>
<hr width="100%" size="1">
</ContentTemplate>
</Choice>
<Choice Filter="IsHtml32">
<ContentTemplate>
<hr width="100%" size="1" color="#D8D8D8">
</ContentTemplate>
</Choice>
<Choice Filter="IsChtml10">
<ContentTemplate>
<hr width="100%" size="1">
</ContentTemplate>
</Choice>
<Choice Filter="IsXhtmlMp">
<ContentTemplate>
<hr width="100%" size="1" style="color:#D8D8D8" />
</ContentTemplate>
</Choice>
<Choice>
<ContentTemplate>
<mobile:LiteralText RunAt="Server" Text="-----" BreakAfter="true" />
</ContentTemplate>
</Choice>
</mobile:DeviceSpecific>
</mobile:Panel>
</Template>
</SharePoint:RenderingTemplate>
请注意,此标记声明了 ASP.NET Panel 控件,然后根据移动设备的浏览器使用的标记语言设计它。如果此浏览器不符合任何特定类型的要求,则默认呈现将在 LiteralText 控件中创建一个带五个连字符的分隔符。
以下代码演示 RenderingTemplate 的声明。请注意,它调用了一个 SPMobileLabel 对象。
<SharePoint:RenderingTemplate RunAt="Server" id="MobileFormFieldSeparator">
<Template>
<SPMobile:SPMobileLabel RunAt="Server" Text="" BreakAfter="true" />
</Template>
</SharePoint:RenderingTemplate>
调用 SPMobileComponent 对象
如前面的页面上的控件一节中所述,SPMobileComponent 控件和派生自 SPMobileComponent 的控件可在 SharePoint Foundation 移动页上用来调用呈现模板。因此,RenderingTemplate 的 Template 元素有时包括对这些对象之一的调用也不足为奇。这种情况发生在 RenderingTemplate 需要呈现的内容的一部分恰好与这些 SPMobileComponent 对象之一(间接)呈现的内容重复时。例如,对于在 MobileDefaultTemplates.ascx 中定义的 MobilePageNavigationWithCss RenderingTemplate,部分包含对从 SPMobileComponent 派生的类 SPMobilePageNavigation 的调用,同时部分包含对其 TemplateName 属性设置为 MobilePaginateNavigation 的 SPMobileComponent 对象的调用。下面的代码演示了此声明。
<SharePoint:RenderingTemplate RunAt="Server"
id="MobilePageNavigationWithCss">
<Template>
<SPMobile:SPMobileComponent RunAt="Server"
Templatename="MobilePaginateNavigation" />
<SPMobile:SPMobileNoBreakSpace RunAt="Server" />
<SPMobile:SPMobilePaddedPanel RunAt="Server" BackColor="#F6F6F6">
<SPMobile:SPMobilePageNavigation RunAt="Server" />
</SPMobile:SPMobilePaddedPanel>
</Template>
</SharePoint:RenderingTemplate>
调用模板选择器对象
有时,Template 元素的内容是一个派生自 SPMobileTemplateSelector 的类的对象。有九个这样的类:
-
备注
SPMobileWebUrlRedirect 用于使 SharePoint Foundation 将移动设备重定向到自定义主页。本文中将不会对此进行讨论。有关详细信息,请参阅如何:通过重定向自定义移动主页。
这些控件将根据其派生自的类的名称的含义来选择另一个 RenderingTemplate 以实际呈现部分页面。例如,在页面上的控件一节中提到的 MobileHomePageTitle RenderingTemplate 使用 SPMobileWebTitle 作为其 Template 元素的值。SPMobileWebTitle 会调用一个将呈现移动主页的页眉(标题)区域的 RenderingTemplate。下面是 MobileHomePageTitle 呈现模板在 MobileDefaultTemplates.ascx 中的声明。
<SharePoint:RenderingTemplate RunAt="Server" id="MobileHomePageTitle">
<Template>
<SPMobile:SPMobileWebTitle RunAt="Server" />
</Template>
</SharePoint:RenderingTemplate>
每个 SPMobileTemplateSelector 对象都可通过构造一个分段 ID 来选择 RenderingTemplate。运行库在 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES 的 .ascx 文件中查找具有匹配 ID 的 RenderingTemplate。有关 RenderingTemplate 的分段 ID 的详细信息,请参阅本主题后面的呈现模板分段 ID。有关如何构造 ID 的详细信息,请参阅前面列出的九个类的参考主题以及本主题后面的移动主页上各个部分的呈现方式和列表视图和表单页上各个部分的呈现方式两节的内容。
混合调用
RenderingTemplate 的 Template 元素还可包含对混合的各种控件的调用:
从 SPMobileComponent 派生的对象
包含明确的 TemplateName 值的 SPMobileComponent 对象
来自 Microsoft.SharePoint.MobileControls 和 Microsoft.SharePoint.WebPartPages 命名空间的 ASP.NET Web 控件和 SharePoint Foundation Web 控件
使用 SPMobileTemplateSelector 对象、从 SPMobileComponent 派生的对象和包含明确的 TemplateName 值的 SPMobileComponent 对象的任何调用链最终必须分解为页面分析程序可以移动设备的页面描述语言(例如 XHTML)呈现的控件的调用。
呈现模板分段 ID
MobileDefaultTemplates.ascx 和 GbwMobileDefaultTemplates.ascx 中的许多 RenderingTemplate 都有分段 ID。它们分为四种不同类别:
网站类型变量呈现模板
列表类型变量呈现模板
字段类型变量呈现模板
简单视图列表项呈现模板
重定向"呈现"模板
博客文章列表呈现模板
网站类型变量呈现模板
其呈现行为随网站定义变化的 RenderingTemplate 具有以下格式的分段 ID:
IntendedPageUse_SiteTypeID_PageType_PageArea
对于 PageArea,可能的值为 Title(移动页的页眉区域)、Navigation(页脚区域)和 Contents。
SiteTypeID 是当前网站的网站定义的名称或 ID 号。对于 SharePoint Foundation 附带的网站定义,SiteTypeID 可以是 STS、SGS 或 BLOG。
备注
不支持从移动设备访问 MPS、CENTRALADMIN、TENANTADMIN 和旧式 WIKI 网站。
对于自定义网站定义,SiteTypeID 是网站定义的 ID 号(而非名称)。(使用 WebTemp.xml 文件中 Template 元素的 ID 属性来设置网站定义的 ID。有关网站定义的 ID 属性的详细信息,请参阅 WebTemp.xml。)
PageType 和 IntendedPageUse 都指代移动页的类型,但它们按不同的依据对移动页进行分类。PageType 指代功能性的页面(站在最终用户的立场),例如主页、列表视图页或编辑表单。可能的值为 SPMobilePageType 枚举的值。IntendedPageUse 可用于根据相应的非移动页的类型区分移动页;即其目标页的预期类型。可能的值如下:
WebPartMobile – 适用于摘要移动版的非移动 Web 部件页的模板。
WebPartMobileDetail – 适用于详细移动版的非移动 Web 部件页的模板。
Moblog – 适用于移动博客网页的模板。
Mobile – 所有其他移动页。
示例如下:
Mobile_STS_HomePage_Title
WebPartMobile_SGS_HomePage_Contents
列表类型变量呈现模板
其呈现行为随网站定义变化的 RenderingTemplate 具有名称采用以下格式的分段 ID:
IntendedListUse_ListTypeID_PageType_PageArea
PageType 和 PageArea 具有相同的含义,如前一子节所述。ListTypeID 是当前列表类型的 ID 号(例如 105)或 SPListTemplateType 枚举的值之一(例如 Contacts)。如果将列表指定为网站定义的 Onet.xml 文件中的网站类型的一部分,则 ListTypeID 为 Onet.xml(位于以下目录中:%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\SiteTemplates\Site_Type\xml)中 List 元素的 Type 属性的值。如果已将此列表添加到用户界面 (UI) 的网站中,则 ListTypeID 为已用作新列表类型的基础的列表类型的 ID。
IntendedListUse 可用于标识模板将呈现的列表的特殊类型(如果有)。可能的值如下:
Mobile – 普通列表类型。
MobileFolder – 即将在列表的子文件夹中呈现项目的模板。
MobileDailyView – 即将从组工作网站的日历呈现每天的事件列表的模板。
示例如下:
Mobile_Events_NewForm_Navigation
Mobile_425_EditForm_Contents
字段类型变量呈现模板
其呈现行为随字段类型变化的字段呈现模板具有以下格式的分段 ID:
MobileCustomListField_ListTypeID_FieldType_Field
ListTypeID 的含义与前一子节中所介绍的内容相同。FieldType 是字段的数据类型。它可以是 SPFieldType 枚举的任意值(例如 Text 或 Number),也可以是 fldtypes*.xml 文件(此文件定义了自定义字段类型)中的 <Field Name="TypeName"> 元素定义的自定义字段类型。(有关自定义字段类型的详细信息,请参阅如何:创建自定义字段类型定义。)Field 是字段的内部名称,例如 WorkPhone。如果将该字段指定为列表定义的 Schema.xml 文件中列表的一部分,则可以在 schema.xml 文件中作为 Field 元素的 Name 属性的值找到该内部名称,该文件位于以下目录中:%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES\Feature_Folder。如果该字段已添加到 UI 的列表(即"创建栏"页)中,则 Field 是 SPField.InternalName 属性的值,只能通过对象模型找到它。
备注
Field 是字段(列)的内部名称,它不一定与字段的显示名称相同。对于用户在 UI 中创建的字段,内部名称是系统根据用户选择的显示名称生成的。如果用户在显示名称中使用空格或标点符号,则内部名称会将这些字符替换为用下划线字符括起来的 Unicode 字符数。例如,如果用户将某字段命名为"Coming Soon",则内部名称为"Coming_x0020_Soon"。
示例如下:
MobileCustomListField_Posts_DateTime_PublishedDate
MobileCustomListField_Whereabouts_User_Name
简单视图列表项呈现模板
对于详细移动视图或简单(有时称为"摘要")移动视图,均可呈现列表项。有一些分段 ID 模板可在简单视图中呈现列表项。这些 ID 具有以下格式:
Mobile_ListTypeID_SimpleViewItemRendering
ListTypeID 的含义与前两个子节中所述的内容相同。
博客文章列表呈现模板
SPMobilePostsListTitle 选择 Moblog_MyPosts_Title 或 Moblog_AllPosts_Title 来呈现移动博客网站上的文章列表的标题,具体取决于博客网站的当前视图类型是 MyPosts 还是 AllPosts。
重定向"呈现"模板
MobileDefaultTemplates.ascx 中的一种 RenderingTemplate,实际上不会呈现任何内容。它可用于呈现模板调用链,以便重定向到其他页面。这些 ID 具有以下格式:
Mobile_SiteTypeID_PageType_Redirect
SiteTypeID 和 PageType 的含义与本主题前面的"网站类型变量呈现模板"子节中所述的内容相同。这种类型的呈现模板可调用 SPMobileHomePageRedirection,从而将请求从移动设备重定向到 PageFileName 属性中指定的页面。默认值为 mblwp.aspx。下面是用于重定向到博客网站主页的呈现模板的声明。
<SharePoint:RenderingTemplate RunAt="Server"
id="Mobile_BLOG_HomePage_Redirect">
<Template>
<SPMobile:SPMobileHomePageRedirection RunAt="Server"
PageFileName="bloghome.aspx" />
</Template>
</SharePoint:RenderingTemplate>
移动主页上各个部分的呈现方式
如上所述,"MobileHomePageTitle"使用 SPMobileWebTitle 作为其 Template 元素的值。SPMobileWebTitle 会调用一个将呈现移动主页的页眉(标题)区域的 RenderingTemplate。具体而言,它将查找 ID 为 Mobile_SiteTypeID_HomePage_Title 的 RenderingTemplate,其中 SiteTypeID 是当前网站的网站定义的名称或 ID 号。
如果位于 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES 中的任何 ascx 文件中都不存在特定的当前网站定义的 RenderingTemplate,则呈现系统将使用 Mobile_Default_HomePage_Title(后者反过来将调用控件 SPMobileWeb,此控件只使用 Label 控件呈现网站标题)。有关使用 SharePoint Foundation 附带的主页 RenderingTemplate 的详细信息,请参阅如何:自定义移动主页。
SPMobileWebContents 和 SPMobileWebNavigation 将选择一个 RenderingTemplate,它将分别呈现主页内容区域和移动主页的页脚(导航)区域。这样,所有前三个选择器类将查找具有格式为 Mobile_SiteTypeID_HomePage_PageArea 的 ID 的 RenderingTemplate。
列表视图和表单页上各个部分的呈现方式
列表视图和表单页上使用了 SPMobileListTitle、SPMobileListContents 和 SPMobileListNavigation 类。这些类都将查找具有格式为 Mobile_ListTypeID_PageType_PageArea 的 ID 的 RenderingTemplate,其中 PageType 是 View、NewForm、EditForm、DispForm 或 DeletePage;而 ListTypeID 已在本主题前面的呈现模板分段 ID 一节中进行定义。
内置于 SharePoint Foundation 中的大多数列表类型由 SPListTemplateType 枚举中的值表示。该类型的参考主题指定了每个 SPListTemplateType 的基本整数值。特意选择这些整数值旨在匹配列表类型的数字 ID。因此,参考主题实际上成为列表 ID 号的目录。
有一些列表类型没有匹配的枚举值。下表列出了这些列表类型及其 ID 号。您也可以使用自定义列表类型的 ID 号。自定义列表类型的 ID 号应是大于 10000 的数字,以确保它们不会与供 Microsoft 在将来版本的 SharePoint Foundation 中使用的数字发生冲突。最后,请注意,构建在 SharePoint Foundation 上的 Microsoft 产品(例如 Microsoft SharePoint Server)确实可以定义其他列表类型。
ID |
说明 |
---|---|
151 |
帮助库 |
400 |
时间表 |
401 |
FC 组 |
425 |
新增内容 |
1210 |
通讯组列表 |
如果具有指定当前列表类型的 ID 的 RenderingTemplate 不存在,则使用具有格式为 Mobile_Default_页面类型_页面区域 的 ID 的 RenderingTemplate。有关使用 SharePoint Foundation 附带的列表呈现 RenderingTemplate 的详细信息,请参阅如何:自定义移动列表视图和表单页。
字段呈现
SPMobileListFieldSelector 将选择 RenderingTemplate,后者可在列表视图、新建页、编辑页或显示页上呈现特定字段;前者将查找格式为 MobileCustomListField_ListTypeID_FieldType_Field 的 ID 的 RenderingTemplate,如本主题前面的呈现模板分段 ID 一节所定义。
如果不存在带有要查找的 ID 的 RenderingTemplate,则使用带 ID MobileDefaultListField 的 RenderingTemplate。有关使用 SharePoint Foundation 附带的字段呈现 RenderingTemplate 的详细信息,请参阅如何:自定义移动页上的字段呈现。
移动设备上的字段呈现与计算机上的字段呈现有何区别
在 SharePoint Foundation 中,移动设备与计算机在使用自定义字段呈现控件呈现字段方面类似。但应考虑以下区别:
移动页是与非移动页截然不同的页面,它们引用一组不同的 RenderingTemplate。
移动 RenderingTemplate 是在 MobileDefaultTemplates.ascx 和 GbwMobileDefaultTemplates.ascx(而非 DefaultTemplates.ascx)中声明的。
移动字段呈现控件具有自己的命名空间 Microsoft.SharePoint.MobileControls(而非 Microsoft.SharePoint.WebControls),并且派生自 ASP.NET System.Web.UI.MobileControls 命名空间而非 System.Web.UI.WebControls 中的类。
移动字段呈现控件的继承层次结构与常规字段呈现控件不同。例如,常规字段呈现中 TemplateBasedControl 和 FormComponent 的函数合并到 SPMobileComponent 类中。
与为计算机浏览器创建的自定义字段呈现控件相比,为移动上下文创建的自定义字段呈现控件更多地依赖控件的 CreateChildControls 方法来呈现字段,而相应地较少依赖呈现模板。此外,在移动字段呈现中,控件不需要经常重写 CreateChildControls 方法本身,而通常是重写 CreateChildControls 控件所调用的以下四种其他方法中的一种或几种:CreateControlForDisplay、CreateControlForEdit、CreateControlForNew 和 CreateControlForView。有关自定义字段呈现的详细信息,请参阅如何:创建自定义字段类型和演练:为移动页面创建自定义字段呈现控件。
嵌套的 RenderingTemplates
可以嵌套 RenderingTemplate。请参阅如何:自定义移动主页中的示例。