방법: SiteMapDataSource 웹 서버 컨트롤로 검색되는 노드 필터링
업데이트: 2007년 11월
SiteMapDataSource 컨트롤은 ASP.NET의 기본 사이트 맵 공급자인 XmlSiteMapProvider 같은 사이트 맵 공급자에서 사이트 맵 데이터를 검색합니다. SiteMapDataSource 컨트롤은 사이트 맵 노드 또는 하위 집합의 전체 컬렉션을 반환하도록 구성할 수 있습니다. 이러한 방식은 각각 사이트 맵의 개별 섹션을 표시하는 둘 이상의 탐색 구조를 한 페이지에 표시하는 경우에 유용합니다. 또한 사이트 탐색 요소를 사이트의 개별 마스터 페이지에 분산하여 각 마스터 페이지에 전체 사이트 맵의 서로 다른 부분을 표시하는 경우에도 도움이 됩니다.
이러한 사이트 탐색 컨트롤을 사용하려면 Web.sitemap 파일에 사이트의 구조를 설명하고 사이트 맵에 나열된 .aspx 파일을 만들어야 합니다.
Web.sitemap 파일을 만들려면
웹 사이트의 루트 디렉터리에 새 파일을 만들어 파일 이름을 Web.sitemap으로 지정하고 다음 필수 코드를 파일에 넣습니다.
<?xml version="1.0" encoding="utf-8" ?> <siteMap> </siteMap>
루트 siteMapNode 요소를 siteMap 요소의 자식으로 만들고 다음 특성을 정의합니다.
title 사이트 맵 노드에 웹 페이지의 링크 텍스트로 표시될 제목을 지정합니다.
url 웹 페이지의 URL을 지정합니다. 정규화된 URL이나 ~/Default.aspx 같은 상대 URL을 사용할 수 있습니다. 물결표 문자(~)는 응용 프로그램의 루트를 나타내기 위해 사용합니다. 존재하지 않는 URL을 나열하거나 URL을 복제하는 경우 응용 프로그램이 실행되지 않기 때문에 이 절차의 뒷부분에서는 사이트 맵에 나열된 각 URL에 대해 웹 페이지를 만듭니다. 이 특성은 비워 둘 수 있지만 이 예제의 목적에 맞게 편집할 수 있는 .aspx 파일로 설정합니다.
참고: 사이트 맵에는 루트 siteMapNode 요소가 하나뿐이지만 이 루트에 포함될 수 있는 자식 siteMapNode 요소 수에는 제한이 없습니다.
siteMapNode 요소를 루트 siteMapNode 요소의 자식으로 만듭니다. 이전 단계와 동일한 특성을 설정합니다.
siteMapNode 요소를 이전 siteMapNode 요소의 자식으로 만듭니다. 이전 단계와 동일한 특성을 설정합니다. 이 예제의 목적에 맞게 사이트 맵에는 세 가지 수준의 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.sitemap 파일을 저장한 다음 닫습니다.
웹 페이지에 사이트 탐색을 추가하려면
Web.sitemap 파일의 url 특성에 나열된 각 파일에 대해 .aspx 페이지를 만듭니다. .aspx 파일마다 코드를 다음 코드로 바꿔 사이트 맵 데이터를 표시하는 다양한 컨트롤에 사이트 맵을 표시합니다. .aspx 파일이 사이트 맵에 나열되어 있지 않으면 사이트 탐색 컨트롤을 표시할 수 없습니다.
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" > <title>Simple Navigation Controls</title> </head> <body> <form id="form1" > <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>
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Simple Navigation Controls</title> </head> <body> <form id="form1" > <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>
파일을 저장합니다.
탐색 컨트롤에 반환되는 시작 노드를 변경하려면
사이트 맵에 있는 세 가지 수준의 .aspx 페이지에서 다음 코드 줄과 비슷한 SiteMapDataSource 컨트롤을 찾습니다.
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
위의 코드 줄을 다음과 같이 변경합니다.
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" StartingNodeUrl="~/Services.aspx" />
파일을 저장한 다음 브라우저에서 해당 파일을 봅니다.
Training.aspx 페이지의 탐색 구조는 다른 두 페이지와 다릅니다. 이 구조는 두 번째 노드에서 시작됩니다. SiteMapPath 컨트롤은 공급자에서 직접 사이트 맵 데이터를 가져오며 SiteMapDataSource 컨트롤을 필요로 하지 않으므로 영향을 받지 않습니다.
시작 노드를 변경하기 위한 다른 옵션은 다음과 같습니다.
- StartFromCurrentNode 속성을 true로 설정하면 현재 페이지의 노드에서부터 사이트 맵 구조를 검색합니다.
StartingNodeOffset 속성을 2로 설정하면 루트 노드의 두 개 노드 수준에서부터 현재 페이지의 경로를 따라 사이트 맵 구조를 검색합니다.
시작 노드를 숨기려면
사이트 맵에 있는 세 가지 수준의 .aspx 페이지에서 다음 코드 줄과 비슷한 SiteMapDataSource 컨트롤을 찾습니다.
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
위의 코드 줄을 다음과 같이 변경합니다.
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" ShowStartingNode="~/Services.aspx" />
파일을 저장한 다음 브라우저에서 해당 파일을 봅니다.
이 페이지의 탐색 구조는 다른 두 페이지와 다릅니다. 사이트 맵 노드 컬렉션이 전체 사이트 맵의 분기 하나로 제한되어 있지 않아 Products 노드까지 표시되므로 StartingNodeOffset 속성을 1로 설정하거나 StartingNodeUrl 속성을 ~/Services.aspx로 설정하는 것과 결과가 다르게 나타납니다.
참고: 시작 노드가 사이트 맵의 루트 노드보다 많이 중첩되어 있는 경우에는 StartingNodeOffset 속성을 음수로 설정할 수도 있습니다. 이러한 설정은 대개 StartFromCurrentNode 속성이 true로 설정되어 있고 사이트 맵을 현재 노드의 부모에서부터 표시하려는 경우에 유용합니다.
참고 항목
작업
방법: SiteMapPath 웹 서버 컨트롤의 모양 사용자 지정