2011年6月20日 星期一

SharePoint 2010 Reusable User Control Template Property in WebPart (在SharePoint 2010中使用WebPart存取共用的UserControl屬性)

Situation(情境) : 將共用的使用者控制項(UserControl)部署至SharePoint 2010 網站中,並開放一些對外的屬性,然而在其它的WebPart想要直接存取這些共用UserControl之屬性,該怎麼做呢?

上述問題是客戶在開發SharePoint 2010 時遇到的相關問題,因為SharePoint 2010 針對User Control 有提供預設的開發模型,因此Microsoft建議大家在開發的時候盡量使用Web User Control,因而延伸一些針對User Control 需要注意的開發技巧,以下亞當斯帶各位來實作以上問題的解決方案。

Solution(解決方案):

  1. 新增一個SharePoint 2010 專案用來存放共用的User Control,部署方式為Solution
    CommonUC-1
  2. 新增一個共用的Web User Control ,例如命名為:UserControlTextBox
    CommonUC-2
  3. 設計此User Control 的畫面,並針對此User Control 設計對外開放的屬性,以便其它物件存取其值
    CommonUC-4
    public string UCText
    {
      get
      {
        return TextBox1.Text;
      }
    }
  4. 將此User Control先行部署至SharePoint 2010 網站上,其部署位置將預設為:{SharePointRoot}\Template\ControlTemplates\CommonUC\
  5. 新增另一個WebPart專案,命名為:WebPartProject,並新增一個Visual WebPart (UCVisualWebPartUserControl.ascx) ,為了要存取已經部署到SharePoint 2010 網站上的User Control,要先註冊User Control,如下:
    CommonUC-5
  6. Src挑選來源的時候,可以透過選取視窗,例如直接挑選伺服器上的UserControlTextBox
    CommonUC-6
  7. 在WebPart專案加入參考
    CommonUC-7
  8. 選取同一方案中的CommonUC.dll (共用User Control所在的SharePoint 2010 專案範本)
    CommonUC-8
  9. 在WebPart中先將控制項設計好,如下:
  10. <%@ Register TagPrefix="NETDB" TagName="UserControlTextBox" Src="~/_controltemplates/CommonUC/UserControlTextBox.ascx"  %>

    <NETDB:UserControlTextBox ID="UCT" runat="server" />
    <asp:Button ID="Button1" runat="server" Text="Get UC Text" onclick="Button1_Click" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

  11. 雙擊按鈕,切換到程式碼視窗,將UCT直接轉型為共用的User Control並存取其開放的屬性:UCText即可
    CommonUC-9
  12. 將WebPart部署到SharePoint 2010 網站上
    CommonUC-10
  13. 在SharePoint 2010 網頁中加入WebPart測試,按下按鈕透過UCText屬性存取到共用User Control的TextBox1控制項值。
    CommonUC-11

沒有留言: