程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WSS3SDK之演練--在mobile頁面中創建自定義字段渲染控件

WSS3SDK之演練--在mobile頁面中創建自定義字段渲染控件

編輯:關於.NET

本演練將展示如何通過自定義字段渲染控件關聯一個RenderingTemplate來定制mobile頁面上的字段渲染。下面的樣例展示了如何定制通知列表項的標題字段在mobile的顯示項目,新建項目和編輯項目頁面中的渲染。根據3類頁面的不同,定制化的內容也不一樣:

顯示窗體— 添加了一個搜索鏈接,使得用戶可以導航到MSN新聞搜索結果頁面。

編輯窗體— 當到期日期一欄的值小於當前日期時添加了默認文本。

新建窗體— 添加了默認文本來為用戶展示待輸入的值的特定格式。

必要要求

完成了前面的關於定制Mobile顯示頁面中列表項標題的演練。

准備自定義字段渲染控件的開發環境

在 Visual Studio裡,選擇Tools菜單下的External Tools 。

在External Tools 對話框中,點擊Add 並在Title處輸入 Get Assembly Public Key。

通過浏覽到sn.exe來填寫 Command 文本框。他通常放在 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe.

在 Arguments 文本框中,輸入如下內容(區分大小寫) -Tp "$(TargetPath)"。

啟用 Use Output window 選擇框。

點擊 OK。新的命令就添加到了 Tools 菜單。

新建自定義字段項目

在 Visual Studio中,選擇File菜單下的 New Project 。

在 New Project 對話框中,Project types選擇 Visual C# , Templates選擇 Class Library ,並在Name 中輸入ItemTitleFIEld 。點擊 OK。

在Solution Explorer中右擊 References 結點,點 Add Reference,然後按住 CTRL 鍵,在 Add Reference 對話框的.NET標簽下選擇 System.Web,System.Web.Mobile ,和 Microsoft SharePoint Services 。點擊 OK。

在Solution Explorer中右擊項目名稱並選擇 PropertIEs。

在Properties 對話框中的Application標簽下,輸入MyCompany.SharePoint.MobileControls.ItemTitleField 作為 Assembly name 以及 MyCompany.SharePoint.MobileControls 作為 Default namespace。將其中的 MyCompany 替換成您公司的名稱。在整個演練中,都把MyCompany 替換成您公司的名稱。

打開 Signing 標簽並選擇 Sign the assembly。

在Choose a strong name key file下拉列表框中選取<New...> 。

在 Create Strong Name Key 對話框中,Key file name輸入 ItemTitleField.snk ,並確保 Protect ... 選擇框沒有選中。點 OK。打開 Build Events 標簽,在 Post-build event command line框中輸入下面的內容。該代碼確保了每次您編譯該項目時,項目文件的最新版本會被拷貝到相應的位置,並且重啟 Windows SharePoint Services 3.0 以便裝載最新版本的組件文件。

cd "$(ProjectDir)"
"%programfiles%\microsoft visual studio 8\sdk\v2.0\bin\gacutil" /i "$(TargetPath)" /nologo /f
%systemroot%\system32\iisapp.vbs /a "SharePoint_App_Pool" /r
xcopy *.ascx "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\" /y

將其中的 SharePoint_App_Pool 替換成實際的分配給您的 Windows SharePoint Services Web 應用程序的IIS應用程序池名稱。通常該名稱與宿主應用程序的IIS網站名稱相同;比如, "SharePoint - 80"。(如果名稱中不含有空格的話引號可以省略)

點擊標簽上任何其他可用的控件,這樣Visual Studio 會檢測到變化並在標簽文字後顯示一個星號。

點擊工具欄上的 Save all files 按鈕。

在 Solution Explorer裡,將 Class1.cs重命名為ItemTitleFIEld.cs。

創建渲染控件

如果ItemTitleField.cs文件沒有打開的話將其打開,然後添加下列using 語句:

using System.Web.UI.MobileControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.MobileControls;

將命名空間改成 MyCompany.SharePoint.MobileControls。

將整個 Class1 的定義替換為如下代碼:

public class ItemTitleField : SPMobileBaseTextField
{
}// end ItemTitleField class

請注意,您新建的類繼承自SPMobileBaseTextField。

添加下面的代碼來覆寫 CreateControlForDisplay 方法:

protected override MobileControl CreateControlForDisplay()
{
    string title = Convert.ToString(this.ItemFieldValue);
    if (!String.IsNullOrEmpty(title))
    {
       this.LabelControl.BreakAfter = false;
       this.LabelControl.Text = title + " ";
       this.LinkControl.BreakAfter = false;
       this.LinkControl.Text = "Search";
       this.LinkControl.NavigateUrl = "http://search.MSN.com/results.aspx?q=" + title.Replace(' ', '+');
       Panel panel = new Panel();
       panel.BreakAfter = false;
       panel.Controls.Add(this.LabelControl);
       panel.Controls.Add(this.LinkControl);
       return panel;
    }
    return null;
}

請注意,該方法開頭是獲取當前列表項的Title字段當前值。該當前值存放在ItemFIEldValue中。

添加下面的內容來覆寫 CreateControlForNew 方法:

protected override MobileControl CreateControlForNew()
{
    MobileControl myNewControl = null;
    if (this.Field != null)
    {
       string text = "Group: Project Name";
       if (!this.Page.IsPostBack)
       {
          this.TextBoxControl.Text = text;
       }
       myNewControl = this.TextBoxControl;
    }
    return myNewControl;
}

添加下面的內容來覆寫 CreateControlForEdit方法:

protected override MobileControl CreateControlForEdit()
{
    MobileControl myEditControl = null;
    if (this.Item != null && this.Field != null)
    {
       if (this.NeedEllipsisRendering)
       {
          myEditControl = this.CreateControlForDisplay();
       }
       else
       {
          if (!this.Page.IsPostBack)
          {
             string strEdit = this.Field.GetFieldValueForEdit(this.ItemFieldValue);
             string overDue = "OVERDUE: ";
             SPListItem item = this.ListItem;
             if (item["Expires"] != null)
             {
                System.DateTime date = (DateTime)item["Expires"];
                if (date.CompareTo(System.DateTime.Today) < 0)
                {
                   this.TextBoxControl.Text = overDue + strEdit;
                }
                else
                {
                   this.TextBoxControl.Text = strEdit;
                }
             }
          }
          myEditControl = this.TextBoxControl;
       }
    }
    return myEditControl;
}

選擇Build 菜單中的Build 。您的演練還未完成,但是您需要在這裡先編譯一下該組件以便生成一個公鑰令牌(Public Key Token)。

創建渲染模板

在Solution Explorer裡,右擊項目名稱,ItemTitleFIEld,然後選擇Add,New Item。

在Categories 中選擇 Visual C# Project Items,並在Templates窗口中選Text File。

在 Name 框中,輸入 AnnouncementsItemTitleField.ascx 然後點 Add。 (不要將文件放在項目的子文件夾中,否則之前您創建的 Post-build命令會找不到該文件)

在剛才創建的 AnnouncementsItemTitleField.ascx 文件中添加下列標記:

<%@ Control Language="C#" %>
<%@ Assembly Name="Microsoft.SharePoint, Version=12.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=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SPMobile" Namespace="Microsoft.SharePoint.MobileControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="CustomMobile" Namespace="MyCompany.SharePoint.MobileControls" Assembly="MyCompany.SharePoint.MobileControls.ItemTitleField, Version=1.0.0.0, Culture=neutral, PublicKeyToken=Token" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<SharePoint:RenderingTemplate RunAt="Server" ID="MobileCustomListField_Announcements_Text_Title" >
     <Template>
       <CustomMobile:ItemTitleField RunAt="Server" />
     </Template>
</SharePoint:RenderingTemplate>

MyCompany 都替換成您公司的名稱。

Token 替換成實際的公鑰令牌,您可以通過點擊Tools 菜單下的Get Assembly Public Key 來得到。該密鑰令牌將顯示在輸出窗口的最後一行。只需使用密鑰的 token即可,而不是整個密鑰。

請注意,該文件與在上一個演練中的文件很類似。不同之處在:

(1)上一個演練的這一行

<mobile:Label Text="Title fIEld in Announcements List" RunAt="Server" />

在本例中被替換成:

<CustomMobile:ItemTitleField RunAt="Server" />

這樣,渲染模板將調用您在這個演練中前面創建的字段渲染控件。

(2)一個新的Register 指向用來注冊 “CustomMobile” 標簽前綴。

保存並關閉該文件。

選擇Build 菜單的Rebuild。

測試渲染控件

用您的mobile設備或模擬器導航到您的Web應用程序中的一個包含通知列表的網站。導航到通知列表。點擊新建項目鏈接。您將看到類似下面的界面:

圖1. 在新建窗體中為標題字段指定默認文字

新建一個列表項並指定一個過去的日期作為過期日期。點擊保存。您將會回到列表視圖頁面。點擊新建的列表項下面的顯示鏈接。您將看到如下界面。注意標題後面添加的 Search 鏈接。

圖2. 搜索鏈接添加到顯示窗體

點擊編輯鏈接。您將看到如下界面。注意在當前標題前增加了“過期(OVERDUE)”的文字信息。

圖3. 在編輯窗體中的標題字段文字的條件渲染

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved