2. TreeView-用一个可展开的树显示站点的结构。
3. Menu-使用一菜单显示站点的结构。
4. 在显示站点导航时,TreeView控件和Menu控件都使用SiteMapDataSource控件来读取站点地图的内容。
在底层实现上,这些控件调用了ASP.NET 2.0的站点导航API。既然该站点导航部分是用提供者模型来实现的,那么,该控件在怎样串行化站点地图的内部实现原理是易于理解的。也就是说,不管你是否使用缺省的站点地图或滚动你自己定制的站点地图逻辑,导航控件都可以用于同你的站点地图一道工作。(假定,如果你想使用一个定制的站点地图,那么你确实需要创建一个类-它提供所想要的方法和属性以与站点地图一起工作;更细致的讨论见下一篇文章)。
四、 定义站点地图
一张站点地图由一系列相联系的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> |