1. 程式人生 > >SharePoint 2010--為WebPart建立自定義屬性

SharePoint 2010--為WebPart建立自定義屬性

通過為web part建立自定義屬性,我們可以通過改變web part的屬性實現web part在頁面上的動態顯示。這些屬性儲存在資料庫中,可以在頁面載入的時候進行重用。

接下來建立的web part將會顯示Address,web part提供自定義屬性可以供SharePoint 的使用者進行修改。我們有一些簡單的地址資訊如name,street,zip code和city。

  1. 建立專案
    開啟Visual Studio,建立一個Visual Web Part project,命名為Example.AddressWebPart。

刪除預設的Visual Web Part:“VisualWebPart1”

新增一個Visual Web Part, 命名為Address

開啟Features資料夾,雙擊Feature1,改變feature名字為Address Feature,

為了使得web part在SharePoint上有一個很好的描述,我們可以對配置資訊做一些小的改動:雙擊Address.webpart檔案在Address資料夾中,改變web part的描述資訊:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3
"> <metaData> <type name="Images.Address.Address, $SharePoint.Project.AssemblyFullName$" /> <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage> </metaData> <data> <properties> <property name="
Title" type="string">Address</property> <property name="Description" type="string">Displays a personalizable address on the screen</property> </properties> </data> </webPart> </webParts>

我們也可以改變web part的category,例如改變category為“Utilities”web part就會在名字為Utilities的group中,開啟Elements.xml檔案:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/" >
  <Module Name="Address" List="113" Url="_catalogs/wp">
    <File Path="Address\Address.webpart" Url="Address.webpart" Type="GhostableInLibrary" >
      <Property Name="Group" Value="Utilities" />
    </File>
  </Module>
</Elements>
  1. 自定義web part

首先,新增我們需要的屬性到Address.cs檔案中,Personalizable告訴Web Part framework去儲存屬性到資料庫中,WebBrowsable屬性高數web part framework在web part的編輯區顯示屬性:

namespace Images.Address
{
    [ToolboxItemAttribute(false)]
    public class Address : WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.        private const string _ascxPath = @"~/_CONTROLTEMPLATES/Images/Address/AddressUserControl.ascx";
         [Personalizable(), WebBrowsable]
         public String Firstname { get; set; } 
        [Personalizable(), WebBrowsable] 
        public String Lastname { get; set; } 
        [Personalizable(), WebBrowsable] 
        public String Street { get; set; } 
        [Personalizable(), WebBrowsable] 
        public int Zip { get; set; } 
        [Personalizable(), WebBrowsable] 
        public String City { get; set; }

        protected override void CreateChildControls()
        {
            Control control = Page.LoadControl(_ascxPath);
            Controls.Add(control);
        }
    }
}

現在我們可以檢視web part在SharePoint中的顯示結果,deploy當前的solution,新增建立的web part到一個SharePoint 的page上,點選“Edit Web Part”,我們可以看到定義的屬性在“miscellaneous”下面,如圖所示:

             

嘗試在文字框中出入一些值,web part framework將會儲存這些值到資料庫中,並關聯到web part。然而在web part中沒有顯示,我們需要新增control到“AddressUserControl.ascx”,新增control之前,對“AddressUserControl.ascx.cs”檔案做如下修改:

public partial class AddressUserControl : UserControl
    {
        public Address WebPart { get; set; }
    }

然後點選“Address.cs”檔案,編輯CreateChildControls事件:

protected override void CreateChildControls()
        {
            Control control = Page.LoadControl(_ascxPath);
            if (control != null)
            {
                ((AddressUserControl)control).WebPart = this;
            }
            Controls.Add(control);
        }

通過上述程式碼的改變,我們告訴AddressUserControl去填充在web part配置時的屬性。這樣我們就可以進入到在Address.cs檔案中定義的屬性。

最後新增control到AddressUserControl.ascx檔案:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AddressUserControl.ascx.cs" Inherits="Images.Address.AddressUserControl" %>
<asp:Label ID="lblFirstname" runat="server" style="font-weight: 700" ></asp:Label>&nbsp;<asp:Label  
     ID="lblLastname" runat="server" style="font-weight: 700" ></asp:Label> 
      <br /> 
       <br /> 
        <asp:Label ID="lblStreet" runat="server" ></asp:Label> 
         <br /> 
          <asp:Label ID="lblZip" runat="server" ></asp:Label>&nbsp;-&nbsp;<asp:Label ID="lblCity" runat="server" ></asp:Label>

新增Prerender事件到AddressUserControls.ascx.cs檔案:

protected override void OnPreRender(EventArgs e)  
        {  
            base.OnPreRender(e);  
            if (this.WebPart != null)  
            { 
                this.lblFirstname.Text = this.WebPart.Firstname;  
                this.lblLastname.Text = this.WebPart.Lastname;  
                this.lblStreet.Text = this.WebPart.Street; 
                this.lblZip.Text = this.WebPart.Zip.ToString(); 
                this.lblCity.Text = this.WebPart.City; 
            } 
        }

Deploy當前的solution,新增web part到一個SharePoint page上,修改它的屬性,結果顯示如下: