12.2 网站地图
网站地图又称为“站点地图”,它是一种扩展名为.sitemap的标准的、有固有格式的XML文件,其中包括了网站的导航结构信息,默认情况下网站地图被命名为Web.sitemap,并且被存储在应用程序的根目录下。
12.2.1 定义网站地图
网站地图的定义非常简单,可以直接使用文本编辑器进行编辑,还可以使用Vistual Studio 2012创建,创建的站点地图文件可以自动生成组成网站地图的基本结构,代码如下:
上面是自动生成的网站地图基本结构信息组成的代码。在添加了站点地图文件后,就可以按照自动生成的网站地图的基本结构添加适合本网站的数据信息。
创建站点地图必须遵循以下的一些原则:
(1)网站地图以<siteMap>元素开始。
每一个Web.sitemap文件都是以<siteMap>元素开始,以与之相对的</siteMap>元素结束。其他信息则放在<siteMap>元素和</siteMap>元素之间,例如以下代码:
以上代码中xmlns属性是必须的。如果使用文本编辑器编辑站点地图文件时必须把上面代码中的xmlns属性值完全拷贝过去,它告诉ASP.NET,这个XML文件使用了网站地图标准。
(2)每一个页面由<siteMapNode>元素来描述。
每一个站点地图文件定义了一个网站的页面组织结构,可以使用<siteMapNode>元素向这个组织结构插入一个页面,这个页面将包含一些基本信息:页面的名称(将显示在导航控件中)、页面的描述以及URL(页面的链接地址),示例代码如下:
(3)<siteMapNode>元素可以嵌套。
一个<siteMapNode>元素表示一个页面,通过嵌套<siteMapNode>元素可以形成树型结构的页面组织结构。例如下面的代码:
以上代码包含三个节点,其中主页为顶层页面,其他两个页面为下一级页面。
(4)每一个站点地图都是以单一的<siteMapNode>元素开始的。
每一个站点地图都要包含一个根节点,而所有其他的节点都包含在根节点中。
(5)不允许重复的URL。
在站点地图文件中,可以没有URL,但不允许有重复的URL出现,这是因为SiteMapProvider以集合的形式来存储节点,而每项是以URL为索引的。这样就会出现一个小问题,如果想要在不同的层次引用相同页面的话,就不能实现了。但是只要稍微修改一下URL就照样可以使用站点地图文件来实现网站的导航,代码如下:
以上代码是合法的,虽然引用同样的页面,但url并不完全相同,因此,用户在这样的情况下就可以考虑适当修饰一下url即可突破不允许重复URL的限制。
12.2.2 把站点文件绑定到页面
当创建一个Web.sitemap文件后,就可以在一个页面中使用它了。在一个页面上使用站点文件的步骤如下:
01 必须确定Web.sitemap文件列举的页面都已经存在于网站项目中,这些页面可以是空的,但必须存在,否则,在测试中就会出现问题。
02 在页面上添加一个SiteMapDataSource控件,可以从工具箱中把它拖曳到页面中,定义该控件的代码如下:
以上代码定义一个服务器网站地图控件SiteMapDataSource1并设置它的ID属性。在页面的“设计”视图中,SiteMapDataSource控件呈现为一个灰色的方框,但它不会呈现在浏览器中的。
03 添加一个绑定到SiteMapDataSource控件的导航控件。为了能够把导航控件与SiteMapDataSource控件联系起来,需要设置导航控件的属性DataSourceID为SiteMapDataSource控件的ID。例如代码:
以上代码显示了一个TreeView控件的定义,其属性DataSourceID为SiteMapDataSource1。
上面所提到的SiteMapDataSource控件是网站地图的数据源。Web服务器控件及其他控件可以使用该控件绑定到分层的网站地图数据,网站数据则由为网站配置的网站地图提供程序进行存储。SiteMapDataSource控件可以使那些专门作为网站做导航的控件,如TreeView、Menu等能够绑定到分层的网站地图数据。可以使用这些Web服务器控件将站点地图显示为一个目录,或者对站点进行主动式导航。
SiteMapDataSource控件绑定到网站地图数据,并基于在网站地图层次结构中指定的起始节点显示其视图。默认情况下,起始节点是层次结构的根节点,但也可以是层次结构中的任何其他节点。起始节点由以下几个SiteMapDataSource属性的值来标识。
表12-1 SiteMapDataSource属性的值
站点地图数据是从SiteMapProvider对象中检索的。可指定为站点配置的任何提供程序向SiteMapDataSource提供站点地图数据,并且通过访问SiteMap.Providers集合可获得可用提供程序的列表。开发人员可以为站点指定数据提供程序,以便向SiteMapDataSource提供站点地图数据,如果没有指定提供程序,则使用ASP.NET的默认站点地图提供程序XmlSiteMapProviders。
需要指出的是SiteMapDataSource控件专用于导航数据,但不支持排序、筛选、分页或缓存之类的常规数据源操作,也不支持更新、插入或删除之类的数据记录操作。
【实例12-1】定义网站地图
本实例在网站中创建一个商场积分后台管理导航的网站地图文件,并使用TreeViwe控件和SiteMapDataSource控件进行绑定显示。
01 启动Visual Studio 2012,创键一个ASP.NET Web空应用程序,命名为“实例12-2”。
02 用鼠标右键单击网站名,在弹出的快捷菜单中选择“添加”|“添加新项”命令,弹出如图12-1所示的“添加新项”对话框。
图12-1 “添加新项”对话框
03 选择“已安装模板”下的“Visual C#”模板,并在模板文件列表中选中“站点地图”选项,然后在“名称”文本框输入该文件的名称Web.sitemap,最后单击“添加”按钮。
04 此时在网站根目录下会创建一个如图12-10所示Web.sitemap文件。
图12-2 生成文件
05 双击打开Web.sitemap文件,编写代码如下:
上面的代码中定义了一个具有三个层次的站点地图:第3行定义的是顶层的根节点“首页”。第二层是第4、8、13行定义的“产品”、“服务”、“书籍”的子节点。其中“产品”下又分别在第5行~第6行分别定义了两个低一级的子节点;“服务”下在第9行~第11行分别定义了三个低一级的子节点;“书籍”下在第14行~第15行分别定义了两个低一级的子节点。这些低一级的子节点构成了第三个层次。在每个层次中都有三个属性,url属性设置用于页面导航的地址,title属性用于设置节点的名称,description设置节点的说明文字。