ASP.NET 实践:在非层次化控件中显示网站地图的数据

网站地图数据包含的是层次化信息,每个节点都可以包含零个或多个子节点。TreeViewMenu 控件就是专门为层次化数据而设计的。但是,网站地图数据也可以绑定到非层次化控件(如 DropDownListCheckBoxList,以及其他显示平面数据或线性数据的控件)中。

提示:只有 SiteMapPath 控件和支持 INavigateUIData 接口的控件才能够把网站地图节点以链接的形式进行呈现。

实例

下例代码使用 DropDownList 控件显示 Web.sitemap 文件中的网站地图。

当客户端选择某个下拉列表中的项目时,浏览器会立即重定向至被选择的页面。这个操作是通过在 OnSelectedIndexChanged 事件处理器中调用 Redirect 方法来完成的。

如果上例代码被放置在模板页中,那么 SiteMapDataSource 控件的 StartFromCurrentNode 属性将会确保下拉列表在当前页面被执行之前始终显示网站地图的内容。


<%@ 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"
    
    

你可能感兴趣的:(asp.net)