ASP.NET 网站导航特征可以为用户浏览网站的时候提供一致的导航方式。随着网站的发展,网站的页面会越来越多,链接的管理也开始变得更困难起来。ASP.NET 网站导航可以将页面链接集中存储到同一个位置,并在含有专用 Web 服务器控件的页面中以列表或导航菜单的形式进行呈现。
可以使用 ASP.NET 网站导航创建一致的,更易于管理的导航方案。ASP.NET 网站导航有下列特征:
-
网站地图。网站地图用于描述网站的逻辑结构。可以通过在页面导航文件中添加或删除条目的方式管理页面的导航,并不需要在页面中手动修改。
-
ASP.NET 控件。使用 ASP.NET 控件在网站中显示导航菜单。导航菜单的处理基于网站地图文件。
-
可编程控件。通过 ASP.NET 网站导航,开发可以在代码中创建自定义导航控件并更改显示在导航菜单中的路径信息。
-
访问规则。可以对访问规则进行配置,显示或隐藏导航菜单中的链接。
-
自定义网站地图提供者。创建自定义网站地图提供者可以与自定义后台网站地图数据(比如,某个用来保存链接信息的数据库)协同工作,并将自定义提供者植入 ASP.NET 网站导航系统中。
网站导航如何工作
开发者可以通过 ASP.NET 网站导航描述网站布局的层次化信息。比如,某个由 8 个页面组成的虚拟在线计算机存储系统,网站布局如下:
Home Products Hardware Software Services Training Consulting Support
在使用网站导航之前需要先创建网站地图。当然也可以使用 XML 文件来描述层次化网站结构,同样可以使用其他的相关选项。
创建网站地图之后,就可以在 ASP.NET 页面中使用网站导航控件来显示导航结构。
网站地图的装载过程
默认的 ASP.NET 网站地图提供者以 XML 文件的方式装载网站地图数据,并在应用程序开始运行时将其作为静态数据进行缓存。超大的网站地图文件会在装载过程中消耗过多的内存和 CPU 时间。基于文件的 ASP.NET 网站导航特征会始终保持导航数据中持有最新的内容,一旦网站地图文件被更改,ASP.NET 就会重新装载新的网站地图数据。另外还需要确保没有任何病毒扫描软件更改网站地图文件的内容。
网站导航控件
创建反映网站结构的网站地图是 ASP.NET 网站导航系统的一部分。余下的部分就是在 ASP.NET Web 页面中显示导航结构,使用户更加容易地在网站中穿梭自如。使用下列 ASP.NET 导航控件可以简化导航系统的建立过程:
-
SiteMapPath
。该控件显示导航路径,路径的内容被分隔符号进行分隔,用来显示用户使用的当前页面位置以及返回到主页的逆向路径。该控件还提供了若干选项来定制链接显示的外观。 -
TreeView
。该控件显示树形结构或菜单信息,用户可以用于进行网站页面间的跳转。点击含有子目录的目录结点时会对其子目录内容的显示状态进行切换。 -
Menu
。该控件显示成可展开式菜单,用户可以用于不同页面间的跳转。鼠标经过含有子菜单的菜单结点时会显示子菜单中的内容。
在先前介绍的在线计算机存储系统中,如果在 Training 页面中添加 SiteMapPath
控件,该控件将会显示出如下信息(Home 和 Services 以超链接形式呈现):
Home > Services > Training
使用 SiteMapPath
控件创建网站导航时不需要进行编码和显式的数据绑定操作。该控件会自动读取并呈现网站地图信息。但是,如果有必要,也可以编写代码来自定义 SiteMapPath
控件。
SiteMapPath
控件允许用户从当前页面跳转至更高层次的父级目录。但是,SiteMapPath
控件不允许从当前页面跳转至更深层次的子级目录。SiteMapPath
控件适合在新闻组或消息板块应用中使用,因为用户经常需要查看当前浏览页面的所在类别。
通过使用 TreeView
或 Menu
控件,用户可以查看子目录列表并直接导航到目标页面。与 SiteMapPath
不同的是,这些控件并不从网站地图中直接读取信息。另外,也可以在页面中添加 SiteMapDataSource
控件来读取网站地图信息。可以将 TreeView
或 Menu
控件与 SiteMapDataSource
控件进行绑定,自动呈现网站地图的内容。比如,TreeView
控件会显示出如下内容:
- Home - Services + Training
注意:在网站中为所有页面同时使用 SiteMapPath
,TreeView
,或 Menu
控件进行导航显示的一个简单方法就是创建使用这些控件的模板页。
网站导航 API
使用导航控件实现页面导航时只需要少量(甚至不需要)代码进行处理,但是也可以根据需要对网站导航进行编程。当 Web 应用运行时,ASP.NET 会暴露一个反映网站地图结构的 SiteMap
对象实例,该实例的所有成员都是静态的。接着暴露出包含有每个节点属性的 SiteMapNode
对象集合。(SiteMapPath
控件与 SiteMap
和 StieMapNode
对象需联合使用以显示合适的链接信息。)
可以在代码中使用 SiteMap
,SiteMapNode
,以及 SiteMapProvider
对象来进行网站地图结构的自由跳转或创建显示网站地图数据的自定义控件。网站地图的信息虽然不允许被写入,但是可以对对象实例中的网站地图节点信息进行更改。
网站导航组件之间的关系
下图说明了 ASP.NET 网站导航组件之间的关系。