min10

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这几天闲来无事,就在园子里找前辈们关于ASP.NET站点导航的东西,找了好半天,不过颇有收获,呵呵!但是我想先把我自己看到的关于ASP.NET站点导航控件的知识摘抄下来,以备后用:

您可以使用 ASP.NET 站点导航功能为用户导航站点提供一致的方法。随着站点内容的增加以及您在站点内来回移动网页,管理所有的链接可能会变得比较困难。ASP.NET 站点导航使您能够将指向所有页面的链接存储在一个中央位置,并在列表中呈现这些链接,或用一个特定 Web 服务器控件在每页上呈现导航菜单。

若要为站点创建一致的、容易管理的导航解决方案,可以使用 ASP.NET 站点导航。ASP.NET 站点导航提供下列功能:

  • 站点地图 您可以使用站点地图描述站点的逻辑结构。接着,可通过在添加或移除页面时修改站点地图(而不是修改所有网页的超链接)来管理页导航。

  • ASP.NET 控件 您可以使用 ASP.NET 控件在网页上显示导航菜单。导航菜单以站点地图为基础。

  • 编程控件 您可以以代码方式使用 ASP.NET 站点导航,以创建自定义导航控件或修改在导航菜单中显示的信息的位置。

  • 访问规则 您可以配置用于在导航菜单中显示或隐藏链接的访问规则。

  • 自定义站点地图提供程序 您可以创建自定义站点地图提供程序,以便使用自己的站点地图后端(如存储链接信息的数据库),并将提供程序插入到 ASP.NET 站点导航系统。

站点导航如何工作

通过 ASP.NET 站点导航,可以按层次结构描述站点的布局。例如,一家虚拟在线计算机商店的站点共有八页,其布局如下。

Home
   Products
      Hardware
      Software
   Services
      Training
      Consulting
      Support

若要使用站点导航,请先创建一个站点地图或站点的表示形式。您可以用 XML 文件描述站点的层次结构,但也可以使用其他方法。有关更多信息及示例,请参见 ASP.NET 站点地图

在创建站点地图后,可以使用站点导航控件在 ASP.NET 页上显示导航结构。有关示例,请参见如何:添加简单的站点导航

站点地图加载进程

默认的 ASP.NET 站点地图提供程序会加载站点地图数据作为 XML 文档,并在应用程序启动时将其作为静态数据进行缓存。超大型站点地图文件在加载时可能要占用大量的内存和 CPU 资源。ASP.NET 站点导航功能根据文件通知来使导航数据保持为最新的。更改站点地图文件时,ASP.NET 会重新加载站点地图数据。请确保将所有病毒扫描软件配置为不会修改站点地图文件。有关更多信息,请参见保证 ASP.NET 站点导航的安全

站点导航控件

创建一个反映站点结构的站点地图只完成了 ASP.NET 站点导航系统的一部分。导航系统的另一部分是在 ASP.NET 网页中显示导航结构,这样用户就可以在站点内轻松地移动。通过使用下列 ASP.NET 站点导航控件,您可以轻松地在页面中建立导航信息:

  • SiteMapPath 此控件显示导航路径(也称为面包屑或眉毛链接)向用户显示当前页面的位置,并以链接的形式显示返回主页的路径。此控件提供了许多可供自定义链接的外观的选项。

  • TreeView 此控件显示一个树状结构或菜单,让用户可以遍历访问站点中的不同页面。单击包含子节点的节点可将其展开或折叠。

  • Menu 此控件显示一个可展开的菜单,让用户可以遍历访问站点中的不同页面。将光标悬停在菜单上时,将展开包含子节点的节点。

如果在上述示例中将 SiteMapPath 控件添加到在线计算机商店的“Training”(培训)页中,SiteMapPath 控件将显示如下内容,其中“Home”(主页)和“Services”(服务)呈现为超链接的形式:

主页 > 服务 > 培训

您可以使用 SiteMapPath 控件创建站点导航,既不用编写代码,也不用显式绑定数据。此控件可自动读取和呈现站点地图信息。但是,如果需要,也可以使用代码自定义 SiteMapPath 控件。有关示例,请参见如何:以编程方式修改内存中的站点地图节点

SiteMapPath 控件使用户能够从当前页导航回站点层次结构中较高的页。但是,SiteMapPath 控件不允许从当前页向前导航到层次结构中较深的其他页面。在新闻组或留言板应用程序中,当用户想要查看他们正在浏览的文章的路径时,就可以使用 SiteMapPath 控件。

通过 TreeViewMenu 控件,用户可以打开节点并直接导航到特定的页。这些控件不会像 SiteMapPath 控件那样直接读取站点地图。相反,您需要在页上添加一个可读取站点地图的 SiteMapDataSource 控件。然后,将 TreeViewMenu 控件绑定到 SiteMapDataSource 控件,从而将站点地图呈现在该页上。TreeView 控件将显示如下的类似内容:

- Home

- Services

+ 培训

注意:

在站点中的所有页上显示 SiteMapPathTreeViewMenu 控件有一个简便方法,就是先创建一个母版页,然后将这些控件添加到该页上。有关更多信息,请参见 ASP.NET 母版页概述

站点导航 API

通过导航控件,您只需编写极少的代码甚至不需要代码,就可以在页面中添加站点导航;不过您也能以编程的方式处理站点导航。当 Web 应用程序运行时,ASP.NET 公开一个反映站点地图结构的 SiteMap 对象SiteMap 对象的所有成员均为静态成员。而 SiteMap 对象会公开 SiteMapNode 对象的集合,这些对象包含地图中每个节点的属性。(在使用 SiteMapPath 控件时,该控件会使用 SiteMapSiteMapNode 对象自动呈现相应的链接。

SiteMapNode 对象表示站点地图结构中的一个网站页面。SiteMapNode 对象由静态 SiteMap 类使用一个或多个站点地图提供程序在运行时加载,从而将站点地图数据从永久存储区加载到内存中。SiteMapNode 对象由 SiteMapNodeItem 类包装以供 Web 服务器控件(如 SiteMapPath 控件)使用。

SiteMapNode 类包括几个用于描述网站中单个页(包括某一页)的属性,如 Url、Title 和 Description 属性; 而 Url 属性由作为 ASP.NET 默认站点地图提供程序的 XmlSiteMapProvider 类使用,该类将这一属性作为内部集合的查找键,提供程序用这个查找键来跟踪节点。SiteMapNode 类支持一个基本的 Key 属性,站点地图提供程序使用该属性来跟踪节点。此外,Url 属性还由导航控件使用,以便呈现导航结构中页面的超链接。Title 属性是 SiteMapNode 的友好名称,通常与 Web 窗体的 HTML 标题相同,并由导航控件用于呈现简单的标签。最后,附加 Attributes 属性的 NameValueCollection 集合可供某些站点地图提供程序使用,这些提供程序使用 SiteMapNode 对象,但需要 SiteMapNode 基类中未提供的附加属性。

您可以在自己的代码中使用 SiteMapSiteMapNodeSiteMapProvider 对象来遍历站点地图结构,或创建自定义的控件来显示站点地图数据。您不能向站点地图进行写入,但可以在对象的实例中修改站点地图节点。有关更多信息,请参见如何:以编程方式修改内存中的站点地图节点如何:以编程方式枚举站点地图节点

即需填充 TreeNode 数据

静态定义数据结构有时是不可行的,或者数据可能会依赖运行时收集的信息。为了动态显示数据,TreeView 控件支持动态节点填充。将 TreeView 控件配置为即需填充时,该控件将在用户展开节点时引发事件。事件处理程序检索相应数据,然后填充到用户单击的节点。若要以数据即需填充 TreeNode 对象,请将节点的 PopulateOnDemand 属性设置为 true,并创建 TreeNodePopulate 事件处理程序以向 TreeNode 对象中填充数据。

客户端 TreeView 节点填充

任何在浏览器功能配置文件中将 SupportsCallback 属性设置为 true 的浏览器都支持客户端节点填充。

借助客户端节点填充,TreeView 控件可以通过从客户端脚本中调用服务器的 TreeNodePopulate 事件来填充节点,而无需完全回发至服务器。有关客户端节点填充的更多信息,请参见 PopulateNodesFromClient

启用客户端脚本

默认情况下,在高级 (Up-level) 浏览器中,TreeView 控件上的节点的展开 - 折叠功能是使用客户端脚本执行的。由于控件不需要回发至服务器来呈现新配置,所以使用客户端脚本可以提高呈现的效率。

注意:

如果浏览器中的客户端脚本被禁用或浏览器不支持客户端脚本,则 TreeView 控件将恢复到低级(Down-level)模式并在每次用户单击节点时回发到服务器。

TreeView 回发

默认情况下,除非浏览器不支持客户端脚本或者 EnableClientScript 属性被设置为 false,否则 TreeView 控件将在客户端处理展开 - 折叠功能。如果 PopulateNodesFromClient 属性被设置为 true 并且浏览器支持客户端脚本,那么 TreeView 控件将从服务器检索数据,而不回发整页。

TreeView 控件处于选择模式时,每次用户单击节点时都将回发到服务器并引发 SelectedNodeChanged 事件。

通常,您应该在 TreeView 控件处于选择模式或正在动态填充节点时处理回发事件。原因是 PopulateOnDemandPopulateNodesFromClient 属性已设置为 true

将 TreeView 控件与 UpdatePanel 控件一起使用

UpdatePanel 控件用于通过回发更新页面的选定区域,而不是更新整个页面。可在 UpdatePanel 控件内使用 TreeView 控件,但具有以下限制:

  • TreeView 回调必须与异步回发关联,否则回调事件验证将会失败。在将 TreeNode 控件的 PopulateOnDemand 属性设置为 true 时,即启用了回调。可以使用以下方法之一来确保 TreeView 回调对 UpdatePanel 控件起作用:

    • 如果 TreeView 控件不在 UpdatePanel 控件内,则在不是异步回发的一部分的 TreeNode 控件上禁用回调。为此,需要将 PopulateOnDemand 属性设置为 false

    • 以编程方式刷新在异步回发过程中注册回调的所有控件。例如,可以将 TreeView 控件放置在 UpdatePanel 控件内。TreeView 控件不必位于发起异步回发的 UpdatePanel 控件中,只要包含 TreeView 控件的 UpdatePanel 控件刷新即可。

  • 必须使用对级联样式表 (CSS) 类的引用来应用样式。例如,使用属性-CssClass(其中属性指 Property)属性 (Attribute) 来设置样式,而不是使用属性-子属性(其中属性指 Property)属性 (Attribute) 设置 NodeStyle 属性 (Property)。同样,在使用 NodeStyle 模板设置样式时,请使用模板的 CssClass 属性 (Attribute)。

  • EnableClientScript 属性必须为 true(默认值)。此外,如果对 TreeView 控件启用了回调,则不能在异步回发之间更改 EnableClientScript 属性。

有关使用 UpdatePanel 控件的更多信息,请参见 UpdatePanel 控件概述部分页呈现概述

 

站点导航组件之间的关系

下面的示意图演示了各个 ASP.NET 站点导航组件之间的关系。

抄自MSDN

posted on 2008-11-17 17:13  min10  阅读(622)  评论(0编辑  收藏  举报