任何由多个页面组成的网站都需要某种导航用户接口。一个导航用户接口可能象一些该站点中的到另外一些页面的静态超级链接一样得简单,或者可能包含菜单或树形控件的使用。
四、 定义站点地图
一张站点地图由一系列相联系的SiteMapNode对象组成。这些SiteMapNode以一种层次方式(在本文的开始已说明)联系在一起。该层次包含单个根结点-它是该层中唯一的一个没有父结点的结点。在该层上的每个结点代表网站的一个逻辑部分。每一部分都有一个标题,URL,描述等-它用SiteMapNodes类的属性(Title,Url,Description等)建模。
这些SiteMapNode对象的层次正说明了站点地图是怎样在内存中描述的-当通过ASP.NET 2.0的站点导航API对它进行分析时。然而,这个站点地图必须被以某种方式进行物理地串行化-如通过一个XML文件或通过一个数据库表。默认地,ASP.NET 2.0使用一个XML格式的文件以提供一个缺省的实现来串行化该站点地图。为使用这种技术,你需要在你的web应用程序的根目录Web.sitemap下创建一个XML文件-它具有下列结构:
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"> <siteMapNode attributes> <siteMapNode attributes> <siteMapNode attributes> ... </siteMapNode> <siteMapNode attributes /> ... <siteMapNode attributes /> </siteMapNode> </siteMap> |
提示:关于创建Web.sitemap文件
利用Visual Studio 2005,你能容易地创建这个站点地图文件-这是通过在解决方案资源管理器的该网站上单击鼠标右键并选择"Add New Item",然后选择该站点地图图标来实现的。请确保文件名为Web.sitemap。新建的文件有几个<siteMapNode>XML元素-类似于上面的XML片断。
<siteMapNode>元素可以有多个属性,最常用的有:
1. title-指定这个节的标题。
2. url-指定某个部分的URL;是可选的,但是如果提供的话,站点地图中的每一个URL必须是唯一的。
3. description-这部分的可选描述;用在生成的导航控件的alt属性中。
<siteMapNode>元素可以嵌套到任何深度;然而,站点地图必须包含一根<siteMapNode>元素。也就是说,<siteMap>结点必须有且只有一个<siteMapNode>元素子结点。
下列的站点地图文件显示出简单部分中所说Amazon.com示例的站点结构(根据本文最后所提供的内容,你可以把这个文件以及一个完整的能够进行站点导航的ASP.NET 2.0网站装载到你的计算机上去)。
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="~/default.aspx" title="Home"> <siteMapNode url="~/Books/default.aspx" title="Books"> <siteMapNode url="~/Books/Novels.aspx" title="Novels" /> <siteMapNode url="~/Books/History.aspx" title="History" /> <siteMapNode url="~/Books/Romance.aspx" title="Romance" /> </siteMapNode> <siteMapNode url="~/Electronics/default.aspx" title="Electronics" /> <siteMapNode url="~/DVDs/default.aspx" title="DVDs" /> <siteMapNode url="~/Computers/default.aspx" title="Computers" /> </siteMapNode> </siteMap> |
五、 使用导航Web控件显示站点地图 现在,既然我们已经定义了一个站点地图,下面我们将要通过一个ASP.NET页面来显示该站点地图的数据。如前面所提的,共有三个内置的导航Web控件-SiteMapPath,TreeView和Menu。使用这些控制是简单的-只需把它们拖动到该ASP.NET页面并且设置属性以调整控件的外观以适合你的站点的外观需要。
为此,我们将为该网站创建一个主页面。正如在《A Sneak Peak at Master Pages in ASP.NET 2.0》中所讨论的,主页面一般提供一个容易的方法来定义整个站点范围的模板。既然导航用户接口元素普遍出现在一个站点的每个页面上,那么主页面常常就是一个来放置校验Web控件的理想位置。具体地说,我的主页面包含一个有下面三部分的表格:
1. 一个表头-这里显示站点的标题("欢迎来到我的网站!")
2. 一个左边部分-这里是一个控件TreeView-它负责列出站点地图的完整内容。这允许参观者快速跳转到站点的特定部分。
3. 一个主部分-这一部分包含相对于每个页面的唯一的内容-它们共同构成整个主页面(注意,在这一部分中的ContentPlaceHolder控件)。另外,在这一部分的顶部还包括了一个控件SiteMapPath-它用于向用户提供一个breadcrumb,来向他们指示其当前位于站点结构的具体位置。
为把SiteMapPath控件添加到主部分上,我简单地从工具箱拖放SiteMapPath控件到主页面上。当添加一个TreeView控件(或菜单)时,首先你需要添加一SiteMapDataSource控件到该页面;然后,添加TreeView(或菜单)并且设置它的DataSourceID属性为SiteMapDataSource控件的ID(这可以使用TreeView控件的灵敏标签来实现)。SiteMapDataSource控件实现通过站点导航API查询站点地图并且把完整的站点地图结构提供给TreeView(或菜单)控件。
下列屏幕快照显示当通过一个浏览器来访问时的该网站。注意,左边的TreeView控件列出站点地图的完整内容。点击TreeView控件中的任何一个结点将快速地把用户引导到适当的部分。顶部的SiteMapPath控件向用户指示他们在该站点层次的位置(也即,Home>Books>Novels)。
六、 结论 本文是探讨ASP.NET 2.0的站点导航功能系列文章的第一篇。在这一篇文章中,我们分析了站点导航的基础,它包含两步:使用一个站点地图来定义站点的结构和通过使用导航控件来实现站点地图。幸好,ASP.NET 2.0使得所有这些处理甚是简单。
在我们分析了站点地图基础的同时,我们还探讨了一些更高级的功能。例如,通过使用ASP.NET 2.0的角色特征,你可以限制该站点的某些部分,这样显示在导航控件中的部分就依赖于访问用户的角色和为该站点地图文件中的这一部分所定义的角色。另外,该站点地图还包括支持地方化和属性-这样可以很容易地实现让你的站点中的每一页的标题和描述轻易地支持每种语言。所有这些以及分析怎样创建一个定制的站点导航提供者,都是我们在后面的文章中所要讨论的。
查看本文来源