首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WSS 3.0 SDK 實戰演練:在 Mobile 頁面建立自訂欄位渲染控制項——繼承 SPMobileBaseTextField 實現三種表單差異化渲染

     編輯:關於.NET

演練目標與前置條件

展示如何透過自訂欄位渲染控制項關聯 RenderingTemplate,針對**公告列表**的 **Title 欄位**在 Mobile 的三種表單實現差異化渲染:

  • 顯示表單:標題後加「Search」連結,導向 MSN 新聞搜尋。
  • 編輯表單:到期日 (Expires) 小於今日 → 標題前綴「OVERDUE: 」。
  • 新建表單:非 PostBack 時預填「Group: Project Name」提示格式。

前置需求:已完成「在 Mobile 顯示頁面定制列表項標題」演練。

開發環境準備:External Tool 取得 PublicKeyToken

  1. VS Tools → External Tools → Add:Title Get Assembly Public Key、Command sn.exe 路徑、Arguments -Tp "$(TargetPath)"、勾選 Use Output window。
  2. 建立 Class Library 專案 ItemTitleField,參考 System.Web、System.Web.Mobile、Microsoft.SharePoint。
  3. 專案屬性:Assembly Name MyCompany.SharePoint.MobileControls.ItemTitleField、Default Namespace MyCompany.SharePoint.MobileControls、簽署強名稱金鑰 ItemTitleField.snk。
  4. Build Events → Post-build:
    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 替換為實際 IIS 應用程式池名稱。
  5. 重命名 Class1.cs → ItemTitleField.cs。

建立渲染控制項:繼承 SPMobileBaseTextField

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

namespace MyCompany.SharePoint.MobileControls
{
    public class ItemTitleField : SPMobileBaseTextField
    {
        // 1. 顯示表單:加入搜尋連結
        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 = "https://search.MSN.com/results.aspx?q=" + title.Replace(' ', '+');
                var panel = new Panel { BreakAfter = false };
                panel.Controls.Add(this.LabelControl);
                panel.Controls.Add(this.LinkControl);
                return panel;
            }
            return null;
        }

        // 2. 新建表單:預設提示文字
        protected override MobileControl CreateControlForNew()
        {
            MobileControl ctrl = null;
            if (this.Field != null)
            {
                string hint = "Group: Project Name";
                if (!this.Page.IsPostBack) this.TextBoxControl.Text = hint;
                ctrl = this.TextBoxControl;
            }
            return ctrl;
        }

        // 3. 編輯表單:條件式前綴
        protected override MobileControl CreateControlForEdit()
        {
            MobileControl ctrl = null;
            if (this.Item != null && this.Field != null)
            {
                if (this.NeedEllipsisRendering) return this.CreateControlForDisplay();
                
                if (!this.Page.IsPostBack)
                {
                    string editVal = this.Field.GetFieldValueForEdit(this.ItemFieldValue);
                    string overdue = "OVERDUE: ";
                    SPListItem item = this.ListItem;
                    if (item["Expires"] != null)
                    {
                        DateTime exp = (DateTime)item["Expires"];
                        this.TextBoxControl.Text = exp.CompareTo(DateTime.Today) < 0 
                            ? overdue + editVal : editVal;
                    }
                }
                ctrl = this.TextBoxControl;
            }
            return ctrl;
        }
    }
}
關鍵屬性:ItemFieldValue 取得目前欄位值;ListItem 取得完整 SPListItem 可存取其他欄位(如 Expires);NeedEllipsisRendering 判斷是否為省略渲染模式。

建立 RenderingTemplate:AnnouncementsItemTitleField.ascx

  1. 專案右鍵 Add → New Item → Text File,命名 AnnouncementsItemTitleField.ascx(置專案根目錄,Post-build 會複製)。
  2. 註冊命名空間與組件,關鍵替換 MyCompany 與 PublicKeyToken(用 External Tool 取得):
    <%@ 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>
  3. Build → Rebuild,組件部署 GAC、.ascx 複製至 CONTROLTEMPLATES、IIS 回收。

測試驗證

用 Mobile 裝置/模擬器瀏覽含公告列表的網站:

  • 新建項目:標題欄預顯「Group: Project Name」。新建表單預設文字
  • 設定過去日期為到期日,儲存後點顯示:標題後出現「Search」連結。顯示表單搜尋連結
  • 點編輯:標題前綴「OVERDUE: 」。編輯表單逾期前綴

此演練示範了 Mobile 欄位渲染擴充點的完整開發週期:控制項邏輯 → 模板宣告 → 部署驗證。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved