方法 : 非階層 Web サーバー コントロール内にサイト マップ データを表示する
更新 : 2007 年 11 月
本来、サイト マップ データは階層的なものです (つまり、各ノードは 0 または 1 つ以上の子ノードを持つことができます)。TreeView コントロールおよび Menu コントロールは階層データを扱うように設計されています。ただし、非階層コントロール (DropDownList コントロール、CheckBoxList コントロール、データを一列またはフラットに表示するその他のコントロールなど) にサイト マップ データをバインドすることもできます。
メモ : |
---|
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 プロパティが設定されていない項目をクライアントが選択した場合、そのクライアントはアプリケーションのホーム ページにリダイレクトされます。
コードのコンパイル方法
この例には、コード例を含む ASP.NET Web ページを参照する有効な Web.sitemap ファイルが必要です。Web.sitemap ファイル内のどのノードにも表示されていないファイルにこのプログラム例を含めると、次のプロパティがコントロールから削除されます。
StartFromCurrentNode="true"
参照
処理手順
方法 : SiteMapDataSource Web サーバー コントロールによって取得されたノードをフィルタ処理する