如何:在非分层 Web 服务器控件中显示站点地图数据

更新:2007 年 11 月

站点地图数据从本质上而言是分层的,这意味着每个节点可以包含零个或多个子节点。TreeViewMenu 控件就是用来处理分层数据的。但是,也可以将站点地图数据绑定到非分层控件,例如 DropDownListCheckBoxList 和其他以线性或平面格式显示数据的控件。

ms178422.alert_note(zh-cn,VS.90).gif说明:

只有 SiteMapPath 控件和支持 INavigateUIData 接口的控件将站点地图节点呈现为链接。

示例

下面的代码示例使用 DropDownList 控件显示来自 Web.sitemap 文件的站点地图数据。

当客户端在下拉列表中选择某项时,浏览器会被重定向到选定的页。这是通过在 OnSelectedIndexChanged 事件处理程序中调用 Redirect 方法来实现的。

如果将此代码示例放置在母版页中,则 SiteMapDataSource 控件中的 StartFromCurrentNode 属性将确保下拉列表始终显示一个站点地图,此站点地图从当前执行的页开始。

<%@ Page Language="VB"  AutoEventWireup="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
  Public Sub _OnSelectedIndexChanged(ByVal Sender As Object, ByVal e As EventArgs)
    Response.Redirect(DropDownList1.SelectedItem.Value)
  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="Server"
          StartFromCurrentNode="true"
          ShowStartingNode="false" />
      <asp:DropDownList ID="DropDownList1" Runat="Server" 
          DataSourceID="SiteMapDataSource1"
          AutoPostBack="True" 
          DataTextField="Title" 
          DataValueField="Url"
          OnSelectedIndexChanged="_OnSelectedIndexChanged" >
      </asp:DropDownList>
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
  void _OnSelectedIndexChanged(Object sender, EventArgs e)
  { 
    Response.Redirect(DropDownList1.SelectedItem.Value);
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>DropDownList Bound to SiteMapDataSource</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="Server"
          StartFromCurrentNode="true"
          ShowStartingNode="false" />
      <asp:DropDownList ID="DropDownList1" Runat="Server" 
          DataSourceID="SiteMapDataSource1"
          AutoPostBack="True" 
          DataTextField="Title" 
          DataValueField="Url"
          OnSelectedIndexChanged="_OnSelectedIndexChanged" >
      </asp:DropDownList>
    </div>
    </form>
</body>
</html>

如果页中不包含任何子节点,则下拉列表将是空的。如果客户端选择了某项,但在 Web.sitemap 文件中未设置与之相应的 URL 属性,则客户端将被重定向到应用程序的主页。

编译代码

  • 本示例要求有一个有效的 Web.sitemap 文件,该文件引用包含代码示例的 ASP.NET 网页。如果将此代码示例放入到一个未在 Web.sitemap 文件的节点中列出的文件内,则应从控件中移除下面的属性:

    StartFromCurrentNode="true"
    

请参见

任务

如何:筛选 SiteMapDataSource Web 服务器控件检索到的节点

概念

ASP.NET 站点导航概述

ASP.NET 站点地图

保证 ASP.NET 站点导航的安全

保证数据访问的安全

其他资源

寄宿环境中的 ASP.NET 应用程序安全性