Situation(情境) : 將共用的使用者控制項(UserControl)部署至SharePoint 2010 網站中,並開放一些對外的屬性,然而在其它的WebPart想要直接存取這些共用UserControl之屬性,該怎麼做呢?
上述問題是客戶在開發SharePoint 2010 時遇到的相關問題,因為SharePoint 2010 針對User Control 有提供預設的開發模型,因此Microsoft建議大家在開發的時候盡量使用Web User Control,因而延伸一些針對User Control 需要注意的開發技巧,以下亞當斯帶各位來實作以上問題的解決方案。
Solution(解決方案):
- 新增一個SharePoint 2010 專案用來存放共用的User Control,部署方式為Solution
- 新增一個共用的Web User Control ,例如命名為:UserControlTextBox
- 設計此User Control 的畫面,並針對此User Control 設計對外開放的屬性,以便其它物件存取其值
public string UCText
{
get
{
return TextBox1.Text;
}
} - 將此User Control先行部署至SharePoint 2010 網站上,其部署位置將預設為:{SharePointRoot}\Template\ControlTemplates\CommonUC\
- 新增另一個WebPart專案,命名為:WebPartProject,並新增一個Visual WebPart (UCVisualWebPartUserControl.ascx) ,為了要存取已經部署到SharePoint 2010 網站上的User Control,要先註冊User Control,如下:
- Src挑選來源的時候,可以透過選取視窗,例如直接挑選伺服器上的UserControlTextBox
- 在WebPart專案加入參考
- 選取同一方案中的CommonUC.dll (共用User Control所在的SharePoint 2010 專案範本)
- 在WebPart中先將控制項設計好,如下:
- 雙擊按鈕,切換到程式碼視窗,將UCT直接轉型為共用的User Control並存取其開放的屬性:UCText即可
- 將WebPart部署到SharePoint 2010 網站上
- 在SharePoint 2010 網頁中加入WebPart測試,按下按鈕透過UCText屬性存取到共用User Control的TextBox1控制項值。
<%@ 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>
沒有留言:
張貼留言