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]
- publicint 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
-
{
-
publicoverride WebPartVerbCollection Verbs
-
{
-
get
-
{
-
EnsureChildControls();
-
verb.Text = "Clear Results";
-
}
-
}
-
?
-
void OnClearResult(object sender, WebPartEventArgs args){...}
-
}
?
-
-
導出Web Part
WebPart.ExprotMode屬性?
WebPartExportMode.None (默認)
WebPartExportMode.All 允許導出所有數據
WebPartExportMode.NonSensitiveData 允許導出非敏感數據可以在構造函數中對Web Part的導出屬性進行定義
- public MyWebPart()
- {
- this.ExportMode = WebPartExportMode.All;
- }
?
也可以選擇某些屬性被導出,在屬性聲明中定義即可。