首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

13.2  WebPart管理器

WebPartManager对象是页面上所有WebPart的操作控制器,任何有WebPart的页面都必须有一个WebPartManager。在页面上放一个WebPartManager实例后,这个管理器会维护WebPart和区域(zone)的一个列表,管理页面状态和个性化,并管理WebPart之间的通信。最简单的形式是只需向页面增加这个控件:

<asp:WebPartManager ID="WebPartManager1" runat="server" />

WebPartManager不显示UI,而且无需设置任何属性,它会在底层为你管理WebPart。图13-1中所示的所有内容都由用户控件或服务器控件(可以是标准服务器控件或定制服务器控件)来管理,并置于页面上的“区域”(zone)中。页面上还可以放其他内容,但是区域中只能是用户控件或服务器控件(实际上,文本等其他内容也是允许的,不过在此忽略)。

只有一个地方需要写代码,就是要编写代码来控制页面的当前状态。默认状态只是浏览页面,你会原样看到内容,不过为了支持定制,还有其他状态:

q 设计(Design),可以在区域之间移动WebPart,还可以最小化甚至隐藏WebPart。

q 编辑(Edit),可以修改WebPart的特性,如边框、标题,等等。

q 连接(Connect),可以把WebPart连接起来,允许信息从一个WebPart流向另一个WebPart。

q Catalog(编目),可以看到隐藏的WebPart,或者是可用但未在页面上显示的WebPart。

可以把WebPartManager的DisplayMode属性设置为某个集合值来改变页面的当前状态,最容易的办法就是利用一个列表,如代码清单13-1所示。

代码清单13-1  一个WebPart页面定制菜单

<asp:DropDownList ID="WebPartMenu" runat="server"

  AutoPostBack="true" OnSelectedIndexChanged="MenuChanged">

  <asp:ListItem value="EditDisplayMode"

    Text="Personalize the page" />

  <asp:ListItem value="BrowseDisplayMode"

    Text="Browse the page" Selected="true" />

  <asp:ListItem value="CatalogDisplayMode"

    Text="Show Catalog" />

  <asp:ListItem Value="ConnectDisplayMode"

    Text="Connect WebParts" />

  <asp:ListItem Value="DesignDisplayMode"

    Text="Design the page" />

</asp:DropDownList>

在回送事件中设置DisplayMode属性,如代码清单13-2所示。

代码清单13-2  设置页面的DisplayMode

protected void MenuChanged(object sender, EventArgs e)

{

  switch (WebPartMenu.SelectedValue)

  {

  case "DesignDisplayMode":

    WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode;

    break;

  case "EditDisplayMode":

    WebPartManager1.DisplayMode = WebPartManager.EditDisplayMode;

    break;

  case "BrowseDisplayMode":

    WebPartManager1.DisplayMode = WebPartManager.BrowseDisplayMode;

    break;

  case "CatalogDisplayMode":

    WebPartManager1.DisplayMode = WebPartManager.CatalogDisplayMode;

    break;

  case "ConnectDisplayMode":

    WebPartManager1.DisplayMode = WebPartManager.ConnectDisplayMode;

    break;

  }

}

有意思的是,DisplayMode不是一个枚举。这里所用的值是WebPartManager的公共静态字段,类型为WebPartDisplayMode。这样就允许模式根据需要设置不同的属性。

你可能希望为菜单系统增加一些智能,而不是永远都显示所有选项,或者只显示某些用户可用的特定选项。这很重要,因为个性化只针对认证用户,所以很容易将菜单与一个LoginView控件结合,或者甚至可以在代码中构造菜单,使用WebPart的更高级特性来指示允许哪些模式。例如,代码清单13-3就动态构造了一个菜单。

代码清单13-3  动态构造WebPart菜单

_manager = WebPartManager.GetCurrentWebPartManager(Page);

String browseModeName = WebPartManager.BrowseDisplayMode.Name;

// Fill the dropdown with the names of supported display modes.

foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes)

{

  String modeName = mode.Name;

  // Make sure a mode is enabled before adding it.

  if (mode.IsEnabled(_manager))

  {

ListItem item = new ListItem(modeName + " Mode", modeName);

DisplayModeDropdown.Items.Add(item);

  }

}

GetCurrentWebPartManager静态方法用于得到页面上WebPartManager的一个引用。尽管可以直接访问WebPartManager,但如果为菜单使用一个定制服务器控件或用户控件,这个方法会很有用。WebPartManager有一个名为SupportedDisplayModes的属性,其中包含当前支持的模式集合,这里考虑了该用户是否已经认证(如果未认证,则只支持浏览模式)。所支持的各个模式提供了一个Name属性,利用各模式的Name属性在菜单中构造了一个ListItem。

代码清单13-4显示了如何使用WebPartDisplayMode属性来简化DisplayMode的设置,这里去除了分支语句。

代码清单13-4  由动态菜单改变DisplayMode

protected void DisplayModeDropdown_SelectedIndexChanged(

  object sender, EventArgs e)

{

  String selectedMode = DisplayModeDropdown.SelectedValue;

  WebPartDisplayMode mode =

    _manager.SupportedDisplayModes[selectedMode];

  if (mode != null)

    _manager.DisplayMode = mode;

}

代码清单13-3和13-4中所示的方法不仅简化了代码,还把菜单处理抽象到一个单独的包中。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论