2011-01-12 11 views
0

私はウェブサイトを開発しており、そこにはweb.sitemapを使用してパンくずらを表示しています。ASP.NET SiteMap

私が直面している問題は、基本的に私はいくつかのハードページとソフトページを持っています。ハードページをクリックするとパンフレットが表示されますが、データベース内にあり、私は1つの特定のページにそれを表示する必要があるが、すべてのページデータのために使用されているリンクは、メインpage.for例が含まれていませ

これは、ハードページ

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ファイルへのインストール

関連する問題