1

我正在爲ASP.NET MVC 3項目使用MVCSitemapProvider,我有一個新聞發佈部分的動態節點。我現在面臨的問題是,有多個節點的一個部分,當我在現場看地圖它的正常工作爲這樣:MVCSiteMapProvider動態節點總是返回麪包屑中所有頁面的第一個節點

> Home 
    > Static Node - Press Releases 
    >Dynamic node - Press Release #1 
    >Dynamic node - Press Release #2 
    >Dynamic node - Press Release #3 

但是在麪包屑,如果我瀏覽到新聞發佈# 2頁。 Breadcrumb將顯示第一個節點。

Home > Press Releases > Press Release #1 

下面是節點提供

public class PressReleaseDynamicNodeProvider : DynamicNodeProviderBase { 

    public PressReleasesRepository _repository = new PressReleasesRepository(); 
    public List<PressRelease> releases = new List<PressRelease>(); 

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection() { 
     releases = _repository.GetPressReleases(); 
     var returnValue = new List<DynamicNode>(); 

     foreach (var release in releases) { 
      DynamicNode node = new DynamicNode(); 
      node.Title = release.Title; 
      returnValue.Add(node); 
     } 
     return returnValue; 
    } 

} 

和MVC網站地圖代碼的代碼:

<mvcSiteMapNode controller="News" action="PressReleases" title="Press Releases" > 
    <mvcSiteMapNode controller="News" action="PressRelease" title="" dynamicNodeProvider="MySite.NodeProvider.PressReleaseDynamicNodeProvider, MySite" /> 
</mvcSiteMapNode> 

當我重寫這個quesiton,我一直在與代碼玩弄,沒有做任何重大改變,現在...新聞稿#1正在顯示新聞稿#1,新聞稿#2正在顯示新聞稿#3和新聞稿#3正在顯示新聞稿#1。

我對此感到莫名其妙。

回答

2

原因是網站地圖提供程序無法區分您的路線。現在所有新聞稿都通過相同的URL/news/pressreleases /訪問。要使麪包屑正確,您應該通過node.RouteValues將類似ID的內容傳遞給提供商。

例如,你的操作方法PressReleasesNewsController可能是這個樣子:

public ActionResult PressReleases(int id) { 
    ... implementation ... 
} 

然後,你會通過id參數到RouteValues這樣的:

foreach (var release in releases) { 
    DynamicNode node = new DynamicNode(); 
    node.Title = release.Title; 
    node.RouteValues.Add("id", release.Id); 
    returnValue.Add(node); 
} 

這個小變化將使麪包屑按預期工作。

+0

完美,工作。非常感謝。 –

相關問題