更新 : 2007 年 11 月
ナビゲーション コントロールを使用すると、コードをほとんど使わずに Web ページにサイト ナビゲーションを追加できますが、コードによってサイト ナビゲーションを操作することもできます。Web アプリケーションを実行すると、ASP.NET は、サイト マップの構造を表す SiteMap オブジェクトを作成します。この SiteMap オブジェクトは、サイト マップ内の各ノードのプロパティを含む SiteMapNode オブジェクトのコレクションを公開します。
SiteMapPath コントロールなどのナビゲーション コントロールは、SiteMap オブジェクトや SiteMapNode オブジェクトと連携して、適切なリンクを自動的に表示します。
SiteMap オブジェクトや SiteMapNode オブジェクトを独自のコードで使用すると、カスタム ナビゲーションを作成できます。
使用例
現在のページがサイトマップ ファイルに登録されている場合に、現在のページのすべての子ノードのタイトルを表示する方法を次のコード例に示します。現在のページがサイトマップ ファイルに登録されていない場合は、SiteMap オブジェクトを使用する最初のコード行によって NullReferenceException 例外が生成されます。
<%@ 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">
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Try
Dim LabelText As String = ""
' Displays the title of the current node.
Label_CurrentNode.Text = SiteMap.CurrentNode.Title
' Determines if the current node has child nodes.
If (SiteMap.CurrentNode.HasChildNodes) Then
For Each ChildNodesEnumerator As SiteMapNode In SiteMap.CurrentNode.ChildNodes
' Displays the title of each node.
LabelText = LabelText & ChildNodesEnumerator.Title & "<br />"
Next
Else
LabelText = LabelText & "No child nodes."
End If
Label_ChildNodes.Text = LabelText
Catch ex As NullReferenceException
Label_CurrentNode.Text = "The current file is not in the site map."
Catch ex As Exception
Label_CurrentNode.Text = "Generic exception: " & e.ToString()
End Try
End Sub ' Page_Load
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Enumerating Child Site Map Nodes</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<h2>Current Node</h2>
<asp:Label ID="Label_CurrentNode" Runat="Server"></asp:Label>
<h2>Child Nodes</h2>
<asp:Label ID="Label_ChildNodes" Runat="Server"></asp:Label>
<h2>Verify Against Site Map</h2>
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
<asp:TreeView ID="TreeView1" Runat="server" DataSourceID="SiteMapDataSource1">
</asp:TreeView>
</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">
private void Page_Load(object sender, System.EventArgs e)
{
try
{
string LabelText = "";
// Displays the title of the current node.
Label_CurrentNode.Text = SiteMap.CurrentNode.Title;
// Determines if the current node has child nodes.
if (SiteMap.CurrentNode.HasChildNodes)
{
foreach (SiteMapNode childNodesEnumerator in SiteMap.CurrentNode.ChildNodes)
{
// Displays the title of each node.
LabelText = LabelText + childNodesEnumerator.Title + "<br />";
}
}
Label_ChildNodes.Text = LabelText;
}
catch (System.NullReferenceException ex)
{
Label_CurrentNode.Text = "The current file is not in the site map.";
}
catch (Exception ex)
{
Label_CurrentNode.Text = "Generic exception: " + e.ToString();
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Enumerating Child Site Map Nodes</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<h2>Current Node</h2>
<asp:Label id="Label_CurrentNode" runat="Server"></asp:Label>
<h2>Child Nodes</h2>
<asp:Label id="Label_ChildNodes" runat="Server"></asp:Label>
<h2>Verify Against Site Map</h2>
<asp:SiteMapDataSource id="SiteMapDataSource1" runat="server" />
<asp:TreeView id="TreeView1" runat="server" dataSourceID="SiteMapDataSource1">
</asp:TreeView>
</form>
</body>
</html>
セキュリティ
ナビゲーション構造内のリンクは、指定したセキュリティー ロールのユーザーに対して非表示にできます。詳細については、「ASP.NET のサイト マップ セキュリティ トリミング」を参照してください。
参照
処理手順
方法 : メモリ内のサイトマップ ノードをプログラムで変更する