【问题标题】:MVCSiteMapProvider Dynamic Node always returns the first node for all pages in the breadcrumbsMVCSiteMapProvider 动态节点始终返回面包屑中所有页面的第一个节点
【发布时间】:2012-05-04 20:56:10
【问题描述】:

我正在为我的 ASP.NET MVC 3 项目使用 MVCSitemapProvider,我有一个用于新闻稿部分的动态节点。我面临的问题是一个部分有多个节点,当我查看站点地图时,它工作正常:

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

但是在面包屑中,如果我导航到新闻稿 #2 页面。面包屑将显示第一个节点。

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>

当我重写这个问题时,我一直在玩代码,没有进行任何重大更改,现在……新闻稿 #1 显示新闻稿 #1,新闻稿 #2 显示新闻稿 # 3 和 Press Release #3 显示 Press Release #1。

我对此感到困惑。

【问题讨论】:

    标签: asp.net-mvc razor mvcsitemapprovider asp.net-mvc-sitemap


    【解决方案1】:

    原因是站点地图提供商无法区分您的路线。目前,所有新闻稿都通过相同的 URL /news/pressreleases/ 访问。要使面包屑正确,您应该通过 node.RouteValues 将类似 id 的内容传递给提供者。

    例如,NewsController 中的操作方法 PressReleases 可能如下所示:

    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);
    }
    

    这个小改动将使面包屑按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多