다음을 통해 공유


방법: 프로그래밍 방식으로 사이트 맵 노드 열거

업데이트: 2007년 11월

탐색 컨트롤을 사용하여 코드가 별로 없거나 전혀 없는 웹 페이지에 사이트 탐색 기능을 추가할 수 있지만 프로그래밍 방식으로 사이트 탐색 기능에 대한 작업을 수행할 수도 있습니다. 웹 응용 프로그램이 실행되면 ASP.NET에서는 사이트 맵의 구조를 반영하는 SiteMap 개체를 만듭니다. 그러면 SiteMap 개체에서는 사이트 맵의 각 노드에 대한 속성이 들어 있는 SiteMapNode 개체의 컬렉션을 노출합니다.

SiteMapPath 컨트롤과 같은 탐색 컨트롤은 SiteMapSiteMapNode 개체와 함께 작동하여 적절한 링크를 자동으로 렌더링합니다.

사용자 고유의 코드에 SiteMapSiteMapNode 개체를 사용하여 사용자 지정 탐색 기능을 만들 수 있습니다.

예제

다음 코드 예제에서는 현재 페이지가 사이트 맵 파일에 나열된 경우 현재 페이지의 모든 자식 노드 제목을 표시하는 방법을 보여 줍니다. 현재 페이지가 사이트 맵 파일에 나열되어 있지 않으면 해당 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 사이트 맵 보안 트리밍을 참조하십시오.

참고 항목

작업

방법: 프로그래밍 방식으로 메모리에서 사이트 맵 노드 수정

개념

ASP.NET 사이트 탐색 보안

데이터 액세스 보안

기타 리소스

호스팅된 환경에서의 ASP.NET 응용 프로그램 보안