그림 1: 웹사이트 구조 |
그림 2: 새 사이트맵 추가하기 |
<?xml 버전="1.0" 인코딩="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="홈" 설명="내 웹 사이트"> <siteMapNode url="~/products/default.aspx" title="제품"> <siteMapNode url="~/products/product1.aspx" title="첫 번째 제품" /> <siteMapNode url="~/products/product2.aspx" title="두 번째 제품" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="서비스"> <siteMapNode url="~/services/service1.aspx" title="첫 번째 서비스" /> <siteMapNode url="~/services/service2.aspx" title="두 번째 서비스" /> </siteMapNode> <siteMapNode url="contact.aspx" title="문의하기" /> </siteMapNode> </사이트맵> |
속성 | 설명 |
제목은 | 페이지 제목을 표시합니다. 이 속성은 탐색 컨트롤에서 URL 제목을 표시하는 데 자주 사용됩니다. |
url은 | 이 노드가 설명하는 페이지의 URL을 표시합니다. |
설명은 | 이 페이지에 대한 설명을 지정합니다. 이 설명을 사용하여 프롬프트 내용을 표시할 수 있습니다. |
역할 | 보안 조정(나중에 설명)을 사용하여 이 속성은 이 페이지에 액세스할 수 있는 역할을 지정합니다. |
그림 3: 탐색경로 탐색 |
웹 양식 이름 | 폴더 |
Default.aspx | 웹 사이트 루트 |
Contact.aspx | 웹 사이트 루트 |
Default.aspx | 제품 |
Product1.aspx | 제품 |
Product2.aspx | 제품 |
Default.aspx | 서비스 |
Service1.aspx | 서비스 |
Service2.aspx | 서비스 |
<%@ 마스터 언어="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <html xmlns="http://www.w3.org/1999/xhtml" > <헤드 runat="서버"> <제목>제목 없는 페이지</제목> </머리> <본문> <양식 id="form1" runat="서버"> <div> <asp:Label ID="Label1" runat="server" Font-Size="XX-Large" ForeColor="Blue" Text="환영합니다!"></asp:Label><br /> <asp:SiteMapPath ID="SiteMapPath1" runat="서버" Font-Names="Verdana" Font-Size="0.8em" PathSeparator=" : "> <PathSeparatorStyle Font-Bold="True" ForeColor="#5D7B9D" /> <CurrentNodeStyle ForeColor="#333333" /> <NodeStyle Font-Bold="True" ForeColor="#7C6F57" /> <RootNodeStyle Font-Bold="True" ForeColor="#5D7B9D" /> </asp:사이트맵경로> <br /> <br /> <asp:contentplaceholder id="ContentPlaceHolder1" runat="서버"> </asp:contentplaceholder> </div> </양식> </본문> </html> |
그림 4: Default.aspx의 샘플 실행 |
HyperLink ID | 텍스트 속성 | NavigateUrl 속성 |
HyperLink1 | 제품 | ~/products/default.aspx |
HyperLink2 | 서비스 | ~/Services/default.aspx |
HyperLink3 | 문의처 | ~/contact.aspx표 |
<%@ 페이지 언어="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="제목 없는 페이지" %> <asp:콘텐츠 ID="콘텐츠1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="서버"> <중앙> <테이블> <tr> <td 너비="60%"> <asp:Label ID="Label1" runat="서버" Font-Size="X-Large" Text="저희 웹사이트에 오신 것을 환영합니다!"></asp:Label></td> </tr> <tr> <td 너비="60%"> <asp:HyperLink ID="HyperLink1" runat="서버" Font-Size="X-Large" NavigateUrl="~/Products/Default.aspx">제품 </asp:하이퍼링크></td> </tr> <tr> <td 너비="60%"> <asp:HyperLink ID="HyperLink2" runat="서버" Font-Size="X-Large" NavigateUrl="~/Services/Default.aspx">서비스 </asp:하이퍼링크></td> </tr> <tr> <td 너비="60%"> <asp:HyperLink ID="HyperLink3" runat="서버" Font-Size="X-Large" NavigateUrl="~/Contact.aspx">연락처 </asp:하이퍼링크></td> </tr> </테이블> </중앙> </asp:내용> |
그림 5: 제품 폴더의 기본 페이지 |
HyperLink ID | 텍스트 속성 | NavigateUrl 속성 |
HyperLink1 | 첫 번째 제품 | ~/products/product1.aspx |
HyperLink2 | 두 번째 제품 | ~/products/product2.aspx |
그림 6. Services 폴더의 기본 페이지 |
HyperLink ID | 텍스트 속성 | NavigateUrl 속성 |
HyperLink1 | 첫 번째 서비스 | ~/Services/service1.aspx |
HyperLink2 | 두 번째 서비스 | ~/Services/service2.aspx |
웹 양식 이름 | 레이블의 텍스트 속성 |
~/Contact.aspx | 문의처 |
~/Products/Product1.aspx | 첫 번째 제품 세부 정보 |
~/Products/Product2.aspx | 두 번째 제품 세부 정보 |
~/Services/Service1.aspx | 첫 번째 서비스 세부 정보 |
~/Services/Service2. aspx | 두 번째 서비스 세부 정보 |
그림 7: Product1.aspx의 샘플 실행 |
web.sitemap 파일의 제목과 URL 속성이 "탐색경로"를 생성하는 데 어떻게 사용되는지 확인하세요. 또한 현재 페이지 제목과 함께 상위 페이지가 어떻게 표시되는지 확인하세요. 다양한 페이지를 탐색하고 SiteMapPath 컨트롤을 관찰해 보세요.
4. SiteMap 데이터 소스 제어 사용
사이트 맵의 사용은 SiteMapPath 컨트롤에만 국한되지 않습니다. 탐색 가능한 컨트롤(예: TreeView)에 사이트맵을 첨부할 수도 있습니다. 다음 예제에서는 동일한 사이트 맵 파일을 사용하여 TreeView 컨트롤에 대한 바인딩을 구현합니다.
새 웹 양식 SiteMapDataSourceDemo.aspx를 웹 사이트에 추가합니다. 그런 다음 SiteMap 데이터 소스 컨트롤(SiteMapDataSource1)과 TreeView 컨트롤(TreeView1)을 폼으로 끌어 놓습니다. 이 TreeView 컨트롤의 DataSourceID 속성을 SiteMapDataSource1로 설정합니다. 또한 TreeView 컨트롤의 ShowLines 속성을 true로 설정합니다. SiteMapDataSourceDemo.aspx 페이지의 전체 마크업은 다음과 같습니다.
<%@ 페이지 언어="C#" AutoEventWireup="true" CodeFile="SiteMapDataSourceDemo.aspx.cs" Inherits="SiteMapDataSourceDemo" %> <html xmlns="http://www.w3.org/1999/xhtml" > <헤드 runat="서버"> <제목>제목 없는 페이지</제목> </머리> <본문> <양식 id="form1" runat="서버"> <asp:TreeView ID="TreeView1" runat="서버" DataSourceID="SiteMapDataSource1" ShowLines="참"> </asp:트리뷰> <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="서버" /> </양식> </본문> </html> |
이제 웹 양식을 실행하여 동일한 탐색 구조가 TreeView에 자동으로 생성되는 방식을 확인하십시오(그림 8 참조).
그림 8: 사이트맵 파일을 TreeView 컨트롤에 바인딩 |
속성 | 설명 |
ChildNodes는 | 현재 노드의 모든 하위 노드 컬렉션을 나타냅니다. |
HasChildNodes는 | 사이트 맵 노드에 하위 노드가 있는지 여부를 나타냅니다(true/false). |
Title은 | 사이트 맵 파일에 지정된 제목 특성 값을 반환합니다. |
Url은 | 사이트 맵 파일에 반환합니다. 지정된 url 속성의 값 |
설명은 | 사이트 맵 파일에 지정된 설명 속성의 값을 반환합니다. |
ParentNode는 | 현재 노드의 상위 사이트 맵 노드에 대한 참조를 나타냅니다. |
protected void Page_Load(개체 전송자, EventArgs e) { int 개수 = SiteMap.RootNode.ChildNodes.Count; for (int i = 0; i < count; i++) { SiteMapNode smNode=SiteMap.RootNode.ChildNodes[i]; TreeNode tvNode = new TreeNode(smNode.Title, "", "", smNode.Url, ""); TreeView1.Nodes.Add(tvNode); if(smNode.HasChildNodes) { int childCount=smNode.ChildNodes.Count; for(int j = 0; j < childCount; j++) { SiteMapNode smChildNode = smNode.ChildNodes[j]; TreeNode tvChildNode = 새 TreeNode(smChildNode.Title, "", "", smChildNode.Url, ""); tvNode.ChildNodes.Add(tvChildNode); } } } } |
여기에서는 먼저 루트 노드의 총 하위 노드 수를 가져옵니다. 그런 다음 루트 노드의 ChildNodes 컬렉션을 반복합니다. 반복할 때마다 TreeNode 클래스의 새 인스턴스를 만들고 생성자에 제목과 URL을 지정합니다. 그런 다음 이 TreeNode를 TreeView의 Nodes 컬렉션에 추가합니다. 그런 다음 현재 SiteMapNode에 하위 노드가 있는지 확인합니다. 있는 경우 이를 탐색하고 TreeNode 생성 프로세스를 반복합니다. 이번에는 현재 TreeNode 개체의 ChildNodes 컬렉션에 새 TreeNodes를 추가합니다.
두 가지 수준의 중첩만 있다는 것을 알고 있으므로 루프에서 2를 사용합니다. 논리를 보다 일반화하려면 재귀를 사용하여 TreeView를 채울 수 있습니다.
웹 양식을 실행하면 그림 8과 비슷한 내용이 다시 표시됩니다.
6. 안전 유지 관리를 사용하십시오.
웹사이트에서는 역할 기반 보안 모델을 구현하는 경우가 많습니다. 예를 들어 시스템 관리자, 제품 테스터, 서비스 테스터 등 애플리케이션에서 다양한 역할을 가질 수 있습니다. 이와 같은 상황에서는 사용자에게 표시되는 사이트 탐색 링크를 제어해야 하는 경우가 많습니다. 예를 들어, 현재 로그인한 사용자에게 제품 테스터 역할이 있는 경우 제품과 관련된 링크만 표시하고 다른 링크는 숨길 수 있습니다. 역할을 처리하는 한 가지 방법은 직접 코딩을 사용하는 것입니다. 그러나 이를 위해서는 모든 인증 논리를 프로그래밍 방식으로 구현해야 합니다. 다행히 사이트맵 파일과 사이트맵 데이터 소스 컨트롤은 함께 보안 조정이라는 기능을 제공합니다.
보안 점검을 테스트하려면 사이트의 멤버십 및 역할 기능을 활성화해야 합니다. web.config 파일을 열고 다음 태그를 추가합니다.
<인증 모드="양식" /> <인가> <사용자 거부="?"></거부> </인증> |
<roleManager 활성화="true" /> |
그림 9: 웹 사이트 관리 도구를 사용하여 역할 추가 |
그림 10: 웹 사이트 관리 도구를 사용하여 사용자 생성 |
<?xml 버전="1.0" 인코딩="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="홈" 설명="내 웹 사이트"> <siteMapNode title="제품" 역할="제품 테스터"> <siteMapNode url="~/products/product1.aspx" title="첫 번째 제품" /> <siteMapNode url="~/products/product2.aspx" title="두 번째 제품" /> </siteMapNode> <siteMapNode title="서비스" 역할="서비스테스터"> <siteMapNode url="~/services/service1.aspx" title="첫 번째 서비스" /> <siteMapNode url="~/services/service2.aspx" title="두 번째 서비스" /> </siteMapNode> <siteMapNode url="contact.aspx" title="문의하기" /> </siteMapNode> </사이트맵> |
<siteMap defaultProvider="myprovider" 활성화="true"> <제공자> <이름 추가="myprovider" type="System.Web.XmlSiteMapProvider " siteMapFile="SecurityTrimming.sitemap" securityTrimmingEnabled="true" /> </공급자> |
그림 11: 로그인 페이지 |
그림 12: 안전 개조 사용 |