2011-06-21 14 views
6

必要なときにURLパラメータを管理するサイト用のサイトマップを開発しようとしています。私はMvcSiteMapProviderを使用しており、動的ノードを使用してさまざまなノードのルートデータを保存しようとしています。しかし、私が持っている問題は、動的ノードの子どもたちにあります。私のサイトマップファイルで動的ノード内のノードをネストすると、Html.MvcSiteMap()。SiteMap()を使用して生成されたサイトマップには表示されず、ページに移動すると、すべてのブレッドクラムが失われます動的ノードMvcSiteMapProvider - ダイナミックノードの子供がブレッドクラムまたはサイトマップに表示されない

例えば

、私のダイナミックノードは、ブレッドクラムは、個人の詳細ページに次のようになり、「人詳細」と呼ばれている場合:

Home > People > Person Details 

しかし、すぐに、私はページにさらに移動すると、「連絡先を言います人物 "の場合、ブレッドクラムは次のようになります。

Person Details > Contact Person 

最初の2つのパスはありません。また、Person Detailsに戻ると、URLパラメータのいずれも維持されません(たとえば、http://localhost:55555/Home/People/PersonDetails?id=12に行くのではなく、http://localhost:55555/Home/People/PersonDetailsになります)。

Html.MvcSiteMap()。SiteMap()を使用してサイトマップ全体を表示しようとすると、動的なノードまで正しい階層が出力されます。サイトマップには、動的ノードプロバイダーで見つかった各「Person」ノードの一意のノードが一覧表示されますが、動的ノードの子は表示されません。

マイマップはこのような何か(省略)になります。

<?xml version="1.0" encoding="utf-8" ?> 
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalization="true"> 
    <mvcSiteMapNode title="Home" controller="Home" action="Index"> 
    <mvcSiteMapNode title="People" controller="Information" action="People"> 
     <mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" dynamicNodeProvider="MySite.Code.PersonDetailsDynamicNodeProvider, MySite"> 
     <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" /> 
     </mvcSiteMapNode> 
    </mvcSiteMapNode> 
    </mvcSiteMapNode> 
</mvcSiteMap> 

をそして、私のダイナミック・ノード・プロバイダーは、次のようになります。

public class PersonDetailsDynamicNodeProvider : DynamicNodeProviderBase 
{ 
    List<Person> people = proxy.GetPeople(); 

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection() 
    { 
     var nodes = new List<DynamicNode>(); 

     foreach (var person in people) 
     { 
      DynamicNode node = new DynamicNode(); 
      node.RouteValues.Add("id", person.ID); 

      nodes.Add(node); 
     } 

     return nodes; 
    } 

    static private PersonServiceClient proxy = new PersonServiceClient(); 
} 

は、私が行方不明です何がありますか?私はちょうど何かを残した感じを得るが、私はウェブ開発には非常に新しいので、実際にこの時点で暗闇の中で刺すだけです。

答えて

8

動的ノードプロバイダーは必要ありません。

<mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" preservedRouteParameters="id"> 
    <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" /> 
</mvcSiteMapNode> 

は、あなたの行っている作業に適しています。

関連する問題