2011-01-12 4 views
0

웹 사이트를 개발 중입니다. 거기에 web.sitemap을 사용하여 빵 부스러기를 보여줍니다.ASP.NET SiteMap

내가 직면하는 문제는 근본적으로 내가 하드 페이지를 클릭했을 때 데이터베이스에 언급 된 일부 하드 페이지와 소프트 페이지를 가지고 있는데, 전체 빵 부스러기를 보여줍니다. 내가 클릭하면 데이터베이스에 나는 하나의 특정 페이지에 표시 할 링크는 메인하십시오 .FrontPage 예를 들어이 하드 페이지

home > main menu > hard page 

입니다

을 포함하지 모든 페이지 데이터에 사용되지만, 데이터베이스에있는 소프트 페이지에

home > soft page 

동적으로 C로 설정하고 싶습니다. # 수정 방법을 아는 사람이 있습니까?

답변

3

사용자 지정 논리로 자신의 XmlSiteMapProvider을 출시하는 방법 예 :

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <siteMap defaultProvider="MyXmlSiteMapProvider" enabled="true"> 
      <providers> 
       <clear /> 
       <add name="MyXmlSiteMapProvider" type="MyXmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" /> 
      </providers> 
     </siteMap> 
    </system.web> 
</configuration> 

를 사용하여 표준 ASP.NET의 이동 경로 제어 :

<asp:SiteMapPath runat="server" RenderCurrentNodeAsLink="true" SkipLinkText="" /> 

public class MyXmlSiteMapProvider : XmlSiteMapProvider 
    { 
     public override SiteMapNode FindSiteMapNode(string rawUrl) 
     { 
      SiteMapNode node = base.FindSiteMapNode(rawUrl); 
      if (node != null) 
      { 
       var page = HttpContext.Current.Handler as Page; 
       if (page != null) 
       { 
        page.Title = node.Title; 
       } 
       var newNode = node.Clone(true); 
       newNode.Url = rawUrl; 
       return newNode; 
      } 
      else 
      { 
       return null; 
      } 
     } 

     public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node) 
     { 
      if (node.Roles.OfType<string>().Any(r => String.Equals(r, "*", StringComparison.Ordinal) || context.User.IsInRole(r))) 
      { 
       return true; 
      } 
      else 
      { 
       throw new InsufficientRightsException(); 
      } 
     } 
    } 

은의 Web.config에 설치

관련 문제