日期:2010-07-13  浏览次数:20563 次

  摘要:ASP.NET 2.0 站点导航系统构建于一个功能强大、灵活的体系结构之上,设计这样的体系结构是为了使其具有可扩展性。本文探究站点提供程序的体系结构并提供一个示例提供程序,该提供程序将文件系统公开为站点导航的数据源,从而替代了标准的 Web.sitemap XML 文件。

  简介

  大多数 web 站点采用可视化导航的某种形式来帮助用户轻松地浏览站点,以及查找他们所需的信息和 Web 页。尽管不同站点之间的感观效果千差万别,但是通常会使用相同的基本元素 — 以导航栏或菜单列表的形式使用户定位到 web 站点的特定位置。

  ASP.NET 1.x 提供的针对站点导航现成的支持很少,导致很多开发人员和 web 设计人员不是构建自己的导航系统,就是购买第三方控件以满足他们的需求。而 ASP.NET 2.0 对此作出了改进,它引入一个使用可插接式框架的导航系统,该框架能够公开站点层次结构和插入这个新模型的控件,因此易于构造一个高质量的菜单和导航系统。

  本文描述 ASP.NET 2.0 导航系统的工作原理并展示如何对其进行扩展 — 不仅仅是使用简单的 XML 文件(Visual Studio 2005 中使用的默认机制)。

  理解 ASP.NET 2.0 中的导航系统

  ASP.NET 2.0 导航系统的一个目标是创建一个可以吸引开发人员和 web 站点设计人员的优秀的导航模型,除此之外,它还有一个目标是创建一个提供可扩展性功能的体系结构,该功能能够灵活地满足广泛的需求。该系统基于一个提供程序模型,该模型的使用贯穿于整个 ASP.NET 2.0 框架,由 ASP.NET 2.0 框架提供一个标准的机制用于插入不同的数据源。

  ASP.NET 2.0 导航框架可以分解为几个部分:

  • 开发人员在实际 web 页面上使用的web 导航控件(Menu、TreeView 和 SiteMapPath)。这些控件可以通过自定义改变感观效果。
 
  • TreeView 和菜单导航控件绑定的 SiteMapDataSource 控件,在 Web 导航控件和导航信息的底层提供程序之间提供一个抽象层。
 
  • 站点地图提供程序是可插接式提供程序,它用于公开描述 web 站点布局的实际信息。ASP.NET 提供了一个提供程序 XmlSiteMapProvider,它使用一个具有特定结构的 XML 文件作为其数据存储。
  这种分层的体系结构在底层的站点层次结构和 web 站点上的控件之间制造了更为松散的耦合,提供了更大的灵活性,而且随着站点的不断发展,更容易实现体系结构和设计的改动。

  以下表格说明提供程序和控件之间的关系。

理解并扩展 ASP.NET 2.0 中的站点导航系统

图 1. 导航体系结构

  对于导航系统,数据源描述用户能够定位的 web 站点页的层次结构,以及将这些信息显示给用户的方式。它作为一个站点地图被引用。一个简单的 web 站点的布局可以是以下形式:

Home
    Products
        Product A
        Product B
Product C
    Latest Offers
    Contact Us
        Email
        Visit us

  导航控件

  在深入研究导航系统的内部工作机制之前,了解开发人员如何与之交互十分重要。最常见的方法是通过 ASP.NET 2.0 中的三个新导航控件。一个站点或页面上可以存在多个 Web 导航控件 — 如,主菜单控件放置在页面左侧,另一个菜单控件放在页面顶部,这种情况还是时有发生的,我们能够以编程方式使一个导航控件控制页面上另一个导航控件,或使它们各自独立操作。

  导航系统通常与母版页功能一起使用,母版页功能也是 ASP.NET 2.0 中提供的新功能。通过将导航控件放置在站点的母版页上,可以确保整个站点具有统一的感观效果。但是,导航功能和母版页功能互不相关且各自独立。

  这三个新 web 控件是:

  • 菜单控件 — 它提供一个传统的导航界面,通常的情况是沿 web 站点的一侧或横跨顶部。它能够显示任意数目的嵌套子菜单,而且,当用户的鼠标停悬在某一项上时,可以显示任意数目的可选弹出子菜单。

理解并扩展 ASP.NET 2.0 中的站点导航系统
图 2. 菜单控件

  • TreeView 控件 — 它提供一个垂直的树状用户界面,通过选择单个节点可以展开和折叠用户界面。它还提供用于选定某些项的复选框功能。

理解并扩展 ASP.NET 2.0 中的站点导航系统
图 3. TreeView 控件

  • SiteMapPath 控件 — 它通常作为“breadcrumb”控件进行引用,因为它可以跟踪用户在站点层次结构内的位置。它将当前位置显示为一个路径,通常是从主页到当前位置的路径,因而用户更容易了解自己所处的位置,并定位回路径上的其他页面。

理解并扩展 ASP.NET 2.0 中的站点导航系统
图 4. SiteMapPath 控件
 

  从体系结构的角度来看,菜单控件和 TreeView 控件有些相似,两者之间的主要区别是编程以及显示方式不同,因此,各自拥有独特的感观效果。要详细了解这两个控件,请参阅 MSDN 中的文章 Introducing the ASP.NET 2.0 TreeView and Menu Controls。值得注意的是,虽然使用菜单控件和 TreeView 控件的最常见情况离不开站点导航,但是它们也能够用于非导航情况,这有待于用户自己做选择。

  SiteMapPath (或“breadcrumb”)控件则略为不同。它直接使用 SiteMapProvider,而不是菜单控件和 TreeView 控件使用的 SiteMapDataSource 控件。这说明它是导航系统内部更有针对性的控件,因此支持将其功能扩展到非导航情况的理论依据更少。

  使用导航系统

  理解站点导航工作原理的一种最简单的方法是,直接在一个应用程序内部访问它,而不是通过一个 Web 控件来访问。下列代码示例说明如何与 SiteMap 对象模型进行交互以显示一部分层次结构化的站点信息。

<%@ Page Language="C#" %><