本節提供了關於定制mobile設備所訪問的Windows SharePoint Services 3.0列表視圖和窗體頁面的基本過程概述。詳細的步驟參加後面的演練文章。
正如先前在Mobile頁面渲染機制一節所描述的,在mobile主頁的頁眉,內容區,頁腳(導航區)中的每個控件都會導致一條鏈式調用,分別通過以下3個模板選擇器控件來啟動該調用。
SPMobileListTitle — 選擇用於渲染頁眉部分的RenderingTemplate控件。
SPMobileListContents — 選擇用於主干部分的 RenderingTemplate 控件。
SPMobileListNavigation — 選擇用於頁腳部分的 RenderingTemplate 控件。
這些類的對象之一會根據當前的列表類型(如通知或其它自定義列表類型)和頁面的類型來選取一個RenderingTemplate對象。
這些控件會搜尋下列格式的RenderingTemplate ID:
Mobile_ ListTypeID _ PageType _ PageArea
其中 ListTypeID 可以是當前列表類型的ID號(如105),也可以是SPListTemplateType枚舉的一個值(如Contacts)。有兩種方式來定義一個列表類型ID:
如果列表是作為網站類型的一部分來在Onet.xml站點定義文件中指定的,則 ListTypeID 的值是Onet.xml中List元素的Type屬性值。該文件位於這個目錄下: Local_Drive:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SITETEMPLATES\Site_Type\xml
如果列表是通過UI添加到網站中的;也就是說,通過新建(列表)頁,則 ListTypeID 為當初用作新列表類型基礎的列表類型的ID。這取決於用戶在創建頁(create.aspx)上的點選,究竟是點擊了哪個列表類型才進到新建頁的。
PageType 可以是 VIEw, NewForm, EditForm, DispForm 或 DeletePage。
PageArea 可以是 Title, Contents或 Navigation。
如果當前列表類型所指定的RenderingTemplate元素的ID沒有找到,則他將使用ID為Mobile_Default_PageType_PageArea的控件。
創建一個包含一個自定義的頁眉(Title),內容主體,或頁腳(導航區域)的mobile列表視圖或窗體頁其實只需要創建一個渲染模板,其ID為對應得頁面區域的模板選擇器控件要搜索的ID。
已有的RenderingTemplate
當Windows SharePoint Services 3.0安裝好後,下列的兩個用於mobile主頁的RenderingTemplates已經存在於MobileDefaultTemplates.ascx中。
Mobile_Comments_DeletePage_Navigation
Mobile_Comments_VIEw_Navigation
Mobile_DiscussionBoard_DispForm_Contents
Mobile_DiscussionBoard_EditForm_Contents
Mobile_DiscussionBoard_EditForm_Navigation
Mobile_DiscussionBoard_NewForm_Navigation
Mobile_DocumentLibrary_View_Navigation
Mobile_Events_DispForm_Navigation
Mobile_Events_EditForm_Navigation
Mobile_Events_NewForm_Navigation
Mobile_Events_View_Contents
Mobile_Posts_DeletePage_Navigation
Mobile_WebPageLibrary_DispForm_Contents
Mobile_WebPageLibrary_DispForm_Navigation
您不應修改該 MobileDefaultTemplates.ascx 文件。您可以創建一個新的RenderingTemplate元素(在您自己的.ascx文件中),只有使用與已存在的渲染控件相同的ID即可。但是,這麼做將會存在風險,可能會破壞其他部署在WSS中的依賴原來的RenderingTemplate對象的解決方案。
注意:
Windows SharePoint Services 3.0自帶的渲染控件會在自定義控件前先載入,所以當存在相同ID的自定義控件時,該控件模板的載入將覆蓋原有的控件。如果有兩個或更多的自定義控件模板 具有相同的ID,則文件名字母順序排列在後面的將覆蓋所有其他的。如果指定的文件中包含兩個或更多的相同ID的渲染模板,則他們都將不被載入。
同時,下列默認的RenderingTemplate 對象也是定義在 MobileDefaultTemplates.ascx 文件中。如果運行時沒有找到為當前列表類型定義的渲染模板,則會使用這些模板。如果您新建的 RenderingTemplate 對象使用這些 ID 上面提到的風險也是存在的。
Mobile_Default_DeletePage_Contents
Mobile_Default_DeletePage_Navigation
Mobile_Default_DeletePage_Title
Mobile_Default_DispForm_Contents
Mobile_Default_DispForm_Navigation
Mobile_Default_DispForm_Title
Mobile_Default_EditForm_Contents
Mobile_Default_EditForm_Navigation
Mobile_Default_EditForm_Title
Mobile_Default_NewForm_Contents
Mobile_Default_NewForm_Navigation
Mobile_Default_NewForm_Title
Mobile_Default_VIEw_Contents
Mobile_Default_View_Navigation
Mobile_Default_View_Title
您可以嵌套 RenderingTemplate 對象。參見下面的示例。
自定義mobile列表視圖或窗體的一部分
在 Microsoft Visual Studio, Notepad, 或任何文本編輯器中,新建一個用戶控件文件(.ascx),放在路徑 \Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES下。
在文件中添加若干page標記來注冊和引用相應的命名空間。
添加一個渲染控件到 .ascx 文件,采用這樣格式的ID:Mobile_ListTypeID_PageType_PageArea.
ListTypeID 可以是當前列表類型的ID號(如105),也可以是SPListTemplateType枚舉的一個值(如Contacts)
PageType 可以為 View,NewForm,EditForm, DispForm或DeletePage
PageArea 可以為 Title, Contents或 Navigation
保存該 .ascx 文件並重新啟動IIS,使更改生效。
示例
下面的例子展示了一個 RenderingTemplate 定義,其中還嵌套了另一個RenderingTemplate 。
<SharePoint:RenderingTemplate RunAt="Server" ID="Mobile_104_View_Navigation">
<Template>
<mobile:Link RunAt="Server" Text="ASP.NET Website" NavigateUrl="http://www.asp.net" />
<mobile:Label RunAt="Server" Text="" BreakAfter="True" />
<SPMobile:SPMobileComponent RunAt="Server" TemplateName="Mobile_Default_View_Navigation" />
</Template>
</SharePoint:RenderingTemplate>