最后,把一个标签添加到每一个其它Web表单并且按表格6所示设置它的Text属性。
| Web表单名 | Label的Text属性 |
| ~/Contact.aspx | Contact Us |
| ~/Products/Product1.aspx | First Product Details |
| ~/Products/Product2.aspx | Second Product Details |
| ~/Services/Service1.aspx | First Service Details |
| ~/Services/Service2.aspx | Second Service Details |
现在,从根文件夹下运行Default.aspx并且导航到Product1.aspx页面。图7显示了Web表单的示例运行情况。
![]() 图7:Product1.aspx的示例运行 |
注意,web.sitemap文件的title和URL属性是怎样用于生成“breadcrumbs”的。另外,还要注意,父级是怎样随着当前页面标题一起显示的。试一试导航到各种页面并观察SiteMapPath控件。
四、 使用SiteMap数据源控件
站点地图的使用并不仅限于SiteMapPath控件。你还可以把站点地图依附到可导航控件(例如TreeView)上。在下列例子中,你将使用相同的站点地图文件来实现与一个TreeView控件的绑定。
把一个新的Web表单SiteMapDataSourceDemo.aspx添加到网站上。然后,把一个SiteMap数据源控件(SiteMapDataSource1)和一个TreeView控件(TreeView1)拖动到表单上。把这个TreeView控件的DataSourceID属性设置为SiteMapDataSource1。另外,还要把该TreeView控件的ShowLines属性设置为true。下面是SiteMapDataSourceDemo.aspx页面中的完整的标记:
| <%@ Page Language="C#" AutoEventWireup="true" CodeFile="SiteMapDataSourceDemo.aspx.cs" Inherits="SiteMapDataSourceDemo" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ShowLines="True"> </asp:TreeView> <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" /> </form> </body> </html> |
现在,运行这个Web表单以观察相同的导航结构是怎样被自动生成到TreeView中的(见图8)。
![]() 图8:把网站地图文件绑定到一个TreeView控件 |
在SiteMapPath或TreeView控件中显示站点地图数据效果太好了。然而,有时你可能需要设计定制生成逻辑。例如,你可能想开发一个定制的导航控件—它仅为了垂直地显示其父级。在这样的情况下,你需要以编程方式来存取这个站点地图文件。SiteMap类允许你准确地实现这一点。
这个SiteMap路径具有两个重要的属性:RootNode和CurrentNode。它们的类型都是SiteMapNode,并且它们都能使你分别参考站点地图的根结点和当前结点。表格7列举了SiteMapNode类的一些重要的属性。
| 属性 | 描述 |
| ChildNodes | 代表当前结点的所有子结点的集合 |
| HasChildNodes | 指示是否站点地图结点具有子结点(true/false) |
| Title | 返回在站点地图文件中指定的title属性的值 |
| Url | 返回在站点地图文件中指定的url属性的值 |
| Description | 返回在站点地图文件中指定的description属性的值 |
| ParentNode | 指出当前结点的父站点地图结点的参考 |
下面的示例使用了SiteMap路径来存取一个站点地图文件的单个结点。然后,以编程方式把它们添加到一个TreeView控件。
添加一个称为SiteMapCustom.aspx的Web表单。然后,把一个TreeView控件拖动到其上。把列表代码添加到这个Web表单的Page_Load事件:






