ASP.NET実践:SiteMapDataSourceコントロールで取り戻したノードをフィルタリングする
5532 ワード
SiteMapDataSource
コントロールは、ウェブサイト地図プロバイダ(例えば、XmlSiteMapProvider
、ASP.NETのデフォルトのウェブサイト地図プロバイダ)によってウェブサイト地図データを取得する.SiteMapDataSource
のコントロールは、すべてのウェブサイトマップノードのセットまたは一部のサブセットを返すように構成することができる.この場合、テンプレート・ページ間の分散ナビゲーション構造が存在する場合に適用され、異なるテンプレート・ページにWebサイトの地図の一部を表示できます.これらのWebサイトのナビゲーションコントロールを使用するには、まずWebでなければなりません.sitemapファイルでは、ウェブサイトの構造を説明し、作成ファイルのパスをウェブサイトの地図に列挙する.aspxファイル.
Webを作成する.sitemapファイル
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
</siteMap>
siteMap
要素のルート要素siteMapNode
を作成し、次のパラメータを定義します.ヒント:1つのWebサイトの地図には、
siteMapNode
個の要素が1個しか表示されませんが、ルート要素にはsiteMapNode
個のサブ要素がいくつか含まれています. siteMapNode
要素のsiteMapNode
サブ要素を作成します.上記の手順に従って同じパラメータを設定します.siteMapNode
要素のsiteMapNode
サブ要素を作成します.上記の手順に従って同じパラメータを設定します.この例で実現する目標として、ウェブサイトマップは、少なくとも3層siteMapNode
以上の深さを有する要素構造を使用しなければならない.この時のWeb.sitemapファイルの内容は、
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="Home" url="~/Default.aspx" roles="*">
<siteMapNode title="Services" url="~/Services.aspx " >
<siteMapNode title="Training" url="~/Training.aspx" />
</siteMapNode>
<siteMapNode title="Products" url="" />
</siteMapNode>
</siteMap>
Webサイトのナビゲーションをページに追加
url
パラメータのファイルパスは、対応するものを作成する.aspxページ.これらのために.aspxファイルには、コントロールにWebサイトの地図データを表示するための次のコードが追加されています.もしあるならば.aspxファイルは、Webサイトの地図に漏れており、Webサイトのナビゲーションコントロールに表示されません.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Simple Navigation Controls</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>Using SiteMapPath</h2>
<asp:SiteMapPath ID="SiteMapPath1" Runat="server">
</asp:SiteMapPath>
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
<h2>Using TreeView</h2>
<asp:TreeView ID="TreeView1" Runat="Server"
DataSourceID="SiteMapDataSource1">
</asp:TreeView>
<h2>Using Menu</h2>
<asp:Menu ID="Menu2" Runat="server"
DataSourceID="SiteMapDataSource1">
</asp:Menu>
<h2>Using a Horizontal Menu</h2>
<asp:Menu ID="Menu1" Runat="server"
DataSourceID="SiteMapDataSource1"
Orientation="Horizontal"
StaticDisplayLevels="2" >
</asp:Menu>
</div>
</form>
</body>
</html>
ナビゲーションコントロールが返す開始ノードの変更
SiteMapDataSource
のコントロールが表示されます.コード定義は、
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"
StartingNodeUrl="~/Services.aspx" />
SiteMapPath
のコントロールが何の役割も果たしていないことを示している.なぜなら、SiteMapDataSource
のコントロールを使用する必要がなく、プロバイダからウェブサイトの地図のデータを直接取得することができるからである.ノードの開始位置を変更する必要がある場合にのみ有効な他のオプションがあります.StartFromCurrentNode
プロパティをtrue
に設定します.すなわち,現在のページを指すノードからウェブサイトの地図構造を取得する.StartingNodeOffset
プロパティを2に設定します.すなわち,ルートディレクトリ以下の2層の深さのサブディレクトリを先頭とし,現在のページの経路に沿ってウェブサイト地図構造を取得する.開始ノードを非表示
SiteMapDataSource
のコントロールが表示されます.コード定義は、
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"
ShowStartingNode="~/Services.aspx" />
StartingNodeOffset
における属性値が1または設定StartingNodeUrl
における属性値が~/Servicesである.Aspxは、Webサイトの地図ノードセットがWebサイト全体の地図に1つのブランチしかないという制限に影響されず、Productsノードをスムーズに表示できるため、異なる.ヒント:Webサイトマップの開始ノードの位置がルートノードよりも深い場合は、StartingNodeOffset
のプロパティ値を負数に設定することもできます.一般に、StartFromCurrentNode
の属性値がtrue
であり、現在のノードの親ノードを先頭としてウェブサイトマップを表示する場合に用いられる.