Web Parts 是Microsoft Visual Studio 2005 中的ASP.NET 2.0的新特性之一,Web Parts是構建類門戶風格(Portal-Style)的應用的架構,它繼承自SharePoint Portal Server的修正模式,可以用最小的代碼建立更豐富的表現,如使用者可以使用拖拽的方式建立頁面配置等。與它有關的控制項都在System.Web.UI.WebControls.WebParts這個命名空間裡。
- WebPartManager控制項
WebPartManager是Web Parts的總控中心。它可以管理Web Parts及地區的列表;管理頁面狀態,當頁面狀態改變時觸發事件;協助Web Parts間的通訊;管理個人化等。
每個頁面僅有一個WebPartsManager執行個體,沒有UI。
- <asp:WebPartManager ID="WebPartManager1" runat="server" />
WebPartManger.DisplayMode
設定或者擷取頁面的顯示模式
BrowserDisplayMode: “正常的”顯示模式,無法編輯(預設)
DesignDisplayMode: 允許拖拽式配置模式
EditDisplayMode: 允許編輯Web Part的外觀及行為
CatalogDisplayMode: 允許將Web Part添加到另外的頁面上
ConnectDisplayMode: 允許Web Parts之間進行通訊
DisplayMode事件
當DisplayMode發生改變時,會觸發WebPartManager.DisplayModeChanging事件,其參數WebPartDisplayModeCancelEventArgs獲得新的顯示模式,並且允許控制者取消這種改變。
當DispalyMode已經發生改變,會觸發WebPartManager.DisplayModeChanged事件,其參數WebPartDispalyModeEventArgs得到原來的顯示模式。
- WebPartZone控制項
WebPartZone是在Web Parts頁面中定義的地區,它定義每個地區中的Web Part的預設顯示樣式及布局。
- <asp:WebPartZone ID="WebPartZone1" runat="server">
- <ZoneTemplate>
- </ZoneTemplate>
- </asp:WebPartZone>
Web Part Chrome則是Web Part的標題列及邊框,它是通過WebPartZone來定義其外觀和操作的。
在WebPartZone中可以定義各種控制項如:Web controls, user controls, custom controls等等。未實現IWebPart介面的控制項將封裝進GenericWebParts,而且需要增加以下的屬性,如Title, Description等。
- CatalogZone控制項
PageCatalogPart: 顯示頁面上已經刪除的Web Part的列表
DeclarativeCatalogPart: 顯示聲明在中的Web Part列表
ImportCatalogPart: 允許.WebPart檔案中匯入的Web Part
- <asp:CatalogZone ID="CatalogZone1" runat="server">
- <ZoneTemplate>
- <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />
- <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server">
- <WebPartsTemplate>
- <asp:Button ID="Button1" runat="server" Text="Button" />
- </WebPartsTemplate>
- </asp:DeclarativeCatalogPart>
- </ZoneTemplate>
- </asp:CatalogZone>
CatalogZone控制項允許Web Part可以互動進行添加,可以包含一個或多個CatalogPart控制項。
- EditorZone控制項
AppearanceEditorPart: 提供修改標題即其它介面相關屬性的
UIBehaviorEditorPart: 提供修改行為屬性的
UI LayoutEditorPart: 提供修改Web Part的顯示狀態,地區及地區索引的
UIPropertyGridEditorPart: 提供修改定製屬性的UI
- <asp:EditorZone ID="EditorZone1" runat="server">
- <ZoneTemplate>
- <asp:AppearanceEditorPart ID="AppearanceEditorPart1" runat="server" />
- <asp:BehaviorEditorPart ID="BehaviorEditorPart1" runat="server" />
- <asp:LayoutEditorPart ID="LayoutEditorPart1" runat="server" />
- <asp:PropertyGridEditorPart ID="PropertyGridEditorPart1" runat="server" />
- </ZoneTemplate>
- <asp:EditorZone>
PropertyGridEditorPart允許修改自訂屬性的UI,顯示標記為[WebBrowsable]的屬性。
- int myVar;
- [WebBrowsable]
- public int MyProperty
- {
- get { return myVar; }
- set { myVar = value; }
- }
EditZone控制項允許互動對Web Parts變更,可以包含一個或多個EditPart控制項。
- Web Part通訊
通訊的提供者需要實現方法返回介面,方法特性[ConnectionProvider]
通訊的訂閱者需要實現方法接收介面,方法特性[ConnectionConsumer]
工作方式:
1.WebPartManager調用[ConnectionProvider]方法
2.WebPartManager從返回參數中獲得介面
3.WebPartManager調用[ConnectionConsumer]方法將介面傳遞給訂閱者
4.訂閱者用給定的介面也發行者通訊
靜態通訊方式:
在設計時就把WebPart之間相互連訊的關係在WebPartManager的StaticConnections元素中定義好了,終端使用者無法修改。
- <asp:WebPartManager ID="WebPartManager1" runat="server">
- <StaticConnections>
- <asp:WebPartConnection ID="myConnection" ConsumerID="MyConsumer" ProviderID="MyProvider" ConsumerConnectionPointID="MyConsumerPoint" ProviderConnectionPointID="MyProviderPoint"/>
- </StaticConnections>
- </asp:WebPartManager>
動態通訊方式:
用ConnectionZone控制項提供供Web Part進行通訊的UI。終端使用者可以在運行時自訂綁定WebPart之間的通訊。
- <asp:ConnectionsZone ID="ConnectionsZone1" runat="server" />
Web Part可以類似於事件的方式相互連訊,提供者發布介面,訂閱者通過介面獲得資料。而通訊之間的聯絡是由WebPartManger來管理的,它從提供者獲得介面,向訂閱者發布介面。通訊可以是靜態,在設計時就定義好,也可以是動態,即在運行時由ConnectionsZone提供後期綁定的UI。
- Web Parts個人化
使用Web Part個人化服務可以自動儲存相關的Web Part的屬性(布局,外觀等等),還可以自動儲存標記為PersonalizableAttribute的定製屬性。
在PersonalizationAdministration類裡還提供了一系列有關個人化服務的API, 來供我們調用。
還可以為每個使用者提供各自的個人化服務,只需要把屬性聲明為[Personalizable]就可以了。
也可以將屬性聲明為[Personalizable (PersonalizationScope.Shared)],這樣的話,這個屬性就可以被每個使用者共用。
Web Parts個人化服務是基於Provider模式的。Beta1的時候提供了兩個Provider:
AccessPersonalizationProvider(Access)
AqlPersonalizationProvider(SQL Server)
在Beta2中AccseePersonalizationProvider已經被移除了。
也可以使用自訂Provider增加對其它資料來源的支援。
如使用SQL Server的Provider需要在Web.config檔案中加入聲明:
- <webParts>
-
- <personalization defaultProvider="AspNetSqlPersonalizationProvider" />
- </webParts>
- 定製Web Parts
任何控制項均可以作為Web Parts來運行,但是最好是採用繼承自WebPart的控制項。這樣可以得到更好的應用,如可以控制控制項標題及其它與UI相關的屬性,控制項的AllowClose, AllowZoneChange, AllowMinimize和其它行為屬性,可以應用於基於角色的安全特性,也可以增加一些自訂的操作,包括匯出Web Part等等。
增加自訂動作:
- public class MyWebPart : WebPart
- {
- public override WebPartVerbCollection Verbs
- {
- get
- {
- EnsureChildControls();
- WebPartVerb verb = new WebPartVerb(new WebPartEventHandler(OnClearResults));
- verb.Text = "Clear Results";
- WebPartVerb[] verbs = new WebPartVerb[] { verb };
- return new WebPartVerbCollection(base.Verbs, verbs);
- }
- }
-
- void OnClearResult(object sender, WebPartEventArgs args){...}
- }
- 匯出Web Part
WebPart.ExprotMode屬性
WebPartExportMode.None (預設)
WebPartExportMode.All 允許匯出所有資料
WebPartExportMode.NonSensitiveData 允許匯出非敏感性資料
可以在建構函式中對Web Part的匯出屬性進行定義
- public MyWebPart()
- {
- this.ExportMode = WebPartExportMode.All;
- }
也可以選擇某些屬性被匯出,在屬性聲明中定義即可。