在使用 ASP.NET 网站导航之前,必须先对网站的结构进行描述,网站导航 API 和网站导航控件才能够正确地完成工作。默认时,网站导航系统使用包含有网站层次结构的 XML 文件。但是,也可以对网站导航系统进行配置,另外使用其他类型的数据源。
创建网站地图最简单的方法就是创建名为 Web.sitemap 的 XML 文件,文件中定义了网站页面的层次化信息。该网站地图自动由 ASP.NET 的默认网站地图提供者进行处理。
Web.sitemap 文件必须位于应用程序根目录。可以引用其他网站地图提供者或同一应用其他目录的网站地图文件。
安全提示:实现自定义网站地图提供者并对非 .sitemap 扩展名的网站地图文件进行存储是潜在的安全隐患。默认的 ASP.NET 配置会在客户端下载之前对含有已知扩展名的文件(如 .sitemap)进行保护。为了保护网站数据,请将非 .sitemap 扩展名的自定义网站地图文件存放到 App_Data 目录。
下面的例程说明网站地图如何对一个含有 3 层深度的简单网站进行辩认。url
参数中可以在起始位置使用代表应用程序根目录的 "~/" 符号。
<siteMap> <siteMapNode title="Home" description="Home" url="~/default.aspx"> <siteMapNode title="Products" description="Our products" url="~/Products.aspx"> <siteMapNode title="Hardware" description="Hardware choices" url="~/Hardware.aspx" /> <siteMapNode title="Software" description="Software choices" url="~/Software.aspx" /> </siteMapNode> <siteMapNode title="Services" description="Services we offer" url="~/Services.aspx"> <siteMapNode title="Training" description="Training classes" url="~/Training.aspx" /> <siteMapNode title="Consulting" description="Consulting services" url="~/Consulting.aspx" /> <siteMapNode title="Support" description="Supports plans" url="~/Support.aspx" /> </siteMapNode> </siteMapNode> </siteMap>
在 Web.sitemap 文件中可以为网站中每个页面都添加相应的 siteMapNode
元素。然后在 siteMapNode
元素下创建层次化内容。在前面的例子中,Hardware 和 Software 就是 Products 级 siteMapNode
元素的子元素。title
参数通常定义链接的显示文本,而 description
参数则在 SiteMapPath
控件中同时扮演备注和提示信息两种角色。
提示:网站地图中可以引用 Web 应用程序之外的 URL 地址。ASP.NET 并不对位于应用程序之外的 URL 引用进行测试。因此如果启用了安全调整,网站地图节点则只有在 roles
参数被设置成 "*" 的时候才会被显示,从而允许任何客户端能够在不进行 URL 测试的情况下查看网站地图节点。
一个有效的网站地图文件仅在 siteMap
元素下包含唯一的 siteMapNode
元素定义。但是位于第一层的 siteMapNode
元素却可以包含若干个 siteMapNode
子元素。另外,有效的网站地图文件中还不允许出现重复的 URL 地址,但是 url
参数允许为空。然而除默认网站地图提供者之外的其他提供者则没有这个限制。
可以同时使用多个网站地图或提供者描述一个完整网站的导航结构。比如,根目录下的 Web.sitemap 文件可以链接到子目录的网站地图文件,下列代码说明了如何在 siteMapNode
元素中引用来自于子目录的网站地图文件。
<siteMapNode siteMapFile="MySiteMap.sitemap"/>
以下列出的网站地图属性均可以被局部化。
Title
Description
Attributes
集合中的自定义属性。
在局部化 Url
属性或定义基于用户位置的其他导航结构时,需要为每个位置定义不同的网站地图文件并在运行时通过编程的方式对合适的 Provider
进行切换。