방법: 프로그래밍 방식으로 사이트 맵 노드 열거
업데이트: 2007년 11월
탐색 컨트롤을 사용하여 코드가 별로 없거나 전혀 없는 웹 페이지에 사이트 탐색 기능을 추가할 수 있지만 프로그래밍 방식으로 사이트 탐색 기능에 대한 작업을 수행할 수도 있습니다. 웹 응용 프로그램이 실행되면 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 >
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" >
<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 >
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" >
<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" />
<asp:TreeView id="TreeView1" dataSourceID="SiteMapDataSource1">
</asp:TreeView>
</form>
</body>
</html>
보안
지정한 보안 역할의 사용자가 볼 수 없도록 탐색 구조의 링크를 숨길 수 있습니다. 자세한 내용은 ASP.NET 사이트 맵 보안 트리밍을 참조하십시오.
참고 항목
작업
방법: 프로그래밍 방식으로 메모리에서 사이트 맵 노드 수정