使用Web Part创建个性化的ASP.NET 2.0应用程序
2007-04-24 10:34
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 ;
}
也可以选择某些属性被导出,在属性声明中定义即可。