惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
The Cloudflare Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
Jina AI
Jina AI
V
V2EX
罗磊的独立博客
V
Visual Studio Blog
A
About on SuperTechFans
IT之家
IT之家
P
Proofpoint News Feed
B
Blog
博客园 - Franky
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog

博客园 - hfyb

用Themes实现网站换肤 .NET学习资源收集 如何将关系数据库(sql sever2005)中的表结构转化为XML架构进而生成XML文件??? 通过自定义控件实现文本框获得输入焦点时的状态 恢复数据库后,恢复原来数据用户的权限 说一点自己的想法 Site Picks : 优秀Pick Sites集锦 防止用'or''=''or'登陆后台 如何制作windows登陆窗口?? 如何实现网页中动态切换的flash广告 - hfyb - 博客园 为 asp.net 2.0 的菜单控件增加 target 属性 Visual Studio 2005 的 101 个示例 --MSDN 用 System.Xml 读写XML 整理文档 - hfyb 发送email - hfyb - 博客园 如何恢复无法修复的Visual Studio 的破损文件 如何实现网页中的浮动广告 - hfyb - 博客园 [转].net的25个小技巧 javascript常用小技巧[转] ASP.NET程序中常用的三十三种代码 [转] - hfyb - 博客园
使用Web Part创建个性化的ASP.NET 2.0应用程序
hfyb · 2007-04-03 · via 博客园 - hfyb

Web Parts 是Microsoft Visual Studio 2005 中的ASP.NET 2.0的新特性之一,Web Parts是构建类门户风格(Portal-Style)的应用的框架,它继承自SharePoint Portal Server的成熟模式,可以用最小的代码创建更丰富的表现,如用户可以使用拖拽的方式创建页面布局等。与它有关的控件都在System.Web.UI.WebControls.WebParts这个命名空间里。

  1. WebPartManager控件

    WebPartManager是Web Parts的总控中心。它可以管理Web Parts及区域的列表;管理页面状态,当页面状态改变时触发事件;协助Web Parts间的通讯;管理个性化等。
    每个页面仅有一个WebPartsManager实例,没有UI。

    1. <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得到原来的显示模式。

  2. WebPartZone控件

    WebPartZone是在Web Parts页面中定义的区域,它定义每个区域中的Web Part的默认显示样式及布局。

    1. <asp:WebPartZone ID="WebPartZone1" runat="server">

    2.  <ZoneTemplate>

    3.  </ZoneTemplate>

    4. </asp:WebPartZone>

    Web Part Chrome则是Web Part的标题栏及边框,它是通过WebPartZone来定义其外观和操作的。

    在WebPartZone中可以定义各种控件如:Web controls, user controls, custom controls等等。未实现IWebPart接口的控件将封装进GenericWebParts,而且需要增加以下的属性,如Title, Description等。

  3. CatalogZone控件

    PageCatalogPart: 显示页面上已经删除的Web Part的列表
    DeclarativeCatalogPart: 显示声明在中的Web Part列表
    ImportCatalogPart: 允许.WebPart文件中导入的Web Part

    1. <asp:CatalogZone ID="CatalogZone1" runat="server">

    2.  <ZoneTemplate>

    3.   <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />

    4.   <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server">

    5.    <WebPartsTemplate>

    6.     <asp:Button ID="Button1" runat="server" Text="Button" />

    7.    </WebPartsTemplate>

    8.   </asp:DeclarativeCatalogPart>

    9.  </ZoneTemplate>

    10. </asp:CatalogZone>

    CatalogZone控件允许Web Part可以交互式的进行添加,可以包含一个或多个CatalogPart控件。
  4. EditorZone控件

    AppearanceEditorPart: 提供修改标题即其它界面相关属性的
    UIBehaviorEditorPart: 提供修改行为属性的
    UI LayoutEditorPart: 提供修改Web Part的显示状态,区域及区域索引的
    UIPropertyGridEditorPart: 提供修改定制属性的UI

    1. <asp:EditorZone ID="EditorZone1" runat="server">

    2.  <ZoneTemplate>

    3.   <asp:AppearanceEditorPart ID="AppearanceEditorPart1" runat="server" />

    4.   <asp:BehaviorEditorPart ID="BehaviorEditorPart1" runat="server" />

    5.   <asp:LayoutEditorPart ID="LayoutEditorPart1" runat="server" />

    6.   <asp:PropertyGridEditorPart ID="PropertyGridEditorPart1" runat="server" />

    7.  </ZoneTemplate>

    8. <asp:EditorZone>

    PropertyGridEditorPart允许修改自定义属性的UI,显示标记为[WebBrowsable]的属性。

    1. int myVar;

    2. [WebBrowsable]

    3. public int MyProperty

    4. {

    5.  get { return myVar; }

    6.  set { myVar = value; }

    7. }

    EditZone控件允许交互式的对Web Parts进行更改,可以包含一个或多个EditPart控件。
  5. Web Part通讯

    通讯的提供者需要实现方法返回接口,方法特性[ConnectionProvider]
    通讯的订阅者需要实现方法接收接口,方法特性[ConnectionConsumer]

    工作方式
    1.WebPartManager调用[ConnectionProvider]方法
    2.WebPartManager从返回参数中获得接口
    3.WebPartManager调用[ConnectionConsumer]方法将接口传递给订阅者
    4.订阅者用给定的接口也发布者通讯

    静态通讯方式
    在设计时就把WebPart之间相互通讯的关系在WebPartManager的StaticConnections元素中定义好了,最终用户无法修改。

    1. <asp:WebPartManager ID="WebPartManager1" runat="server">

    2.  <StaticConnections>

    3.   <asp:WebPartConnection ID="myConnection" ConsumerID="MyConsumer" ProviderID="MyProvider" ConsumerConnectionPointID="MyConsumerPoint" ProviderConnectionPointID="MyProviderPoint"/>

    4.  </StaticConnections>

    5. </asp:WebPartManager>

    动态通讯方式
    用ConnectionZone控件提供供Web Part进行通讯的UI。最终用户可以在运行时自定义绑定WebPart之间的通讯。

    1. <asp:ConnectionsZone ID="ConnectionsZone1" runat="server" />

    Web Part可以类似于事件的方式相互通讯,提供者发布接口,订阅者通过接口获得数据。而通讯之间的联系是由WebPartManger来管理的,它从提供者获得接口,向订阅者发布接口。通讯可以是静态的,在设计时就定义好,也可以是动态的,即在运行时由ConnectionsZone提供后期绑定的UI。
  6. 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文件中加入声明:

    1. <webParts>

    2. <personalization defaultProvider="AspNetSqlPersonalizationProvider" />

    3. </webParts>

  7. 定制Web Parts

    任何控件均可以作为Web Parts来运行,但是最好是采用继承自WebPart的控件。这样可以得到更好的应用,如可以控制控件标题及其它与UI相关的属性,控件的AllowClose, AllowZoneChange, AllowMinimize和其它行为属性,可以应用于基于角色的安全特性,也可以增加一些自定义的操作,包括导出Web Part等等。

    增加自定义操作:

    1. public class MyWebPart : WebPart

    2. {

    3.  

      public override WebPartVerbCollection Verbs

    4.   get

    5.    EnsureChildControls();

    6.    WebPartVerb verb = new WebPartVerb(new WebPartEventHandler(OnClearResults));

    7.    verb.Text = "Clear Results";

    8.    WebPartVerb[] verbs = new WebPartVerb[] { verb };

    9.    

      return new WebPartVerbCollection(base.Verbs, verbs);

    10.  

      void OnClearResult(object sender, WebPartEventArgs args){...}

    11. }

  8. 导出Web Part

    WebPart.ExprotMode属性

    WebPartExportMode.None (默认)
    WebPartExportMode.All 允许导出所有数据
    WebPartExportMode.NonSensitiveData 允许导出非敏感数据

    可以在构造函数中对Web Part的导出属性进行定义

    1. public MyWebPart()

    2. {

    3.  

      this.ExportMode = WebPartExportMode.All;

    4. }

    也可以选择某些属性被导出,在属性声明中定义即可。