MvcSiteMapProvider - 菜单间歇性地消失

时间:2012-12-13 13:56:01

标签: c# asp.net-mvc-3 mvcsitemapprovider

我正在使用Maarten Balliauw的ASP.NET MVC SiteMapProvider

我使用助手显示主导航和面包屑。我不时注意到它们完全从渲染的页面上消失了。

在本地环境中,我必须重建项目并离开浏览器中的当前页面以将其取回。在制作中,我发现我必须重新上传网站DLL。这些“修复”本身只能取得成功。

存在“轻微”模式,但尚未确认 - 编辑或上传视图时出现问题。

非常感谢任何帮助。这是我的一些代码:

站点地图文件的一部分:

  <mvcSiteMapNode title="Home" controller="Home" action="Index" key="home">
    <mvcSiteMapNode title="About us" controller="about" action="index" key="about">
      <mvcSiteMapNode title="Our Approach" controller="about" action="approach" url="/about/our-approach" imageUrl="/content/images/ourApproachNavImg.jpg" />
    </mvcSiteMapNode>

    <mvcSiteMapNode title="News" controller="news" action="index" key="news" showSubNav="false">
      <mvcSiteMapNode dynamicNodeProvider="XXX.Helpers.NewsItemDynamicNodeProvider, KDC" title="" />
    </mvcSiteMapNode>
  </mvcSiteMapNode>

助手:

@Html.MvcSiteMap().Menu(false, true, false)
@Html.MvcSiteMap().SiteMapPath()

dynamicNodeProvider:

public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
        {
            var returnValue = new List<DynamicNode>();
            var newsItemService = DependencyResolver.Current.GetService<INewsItemService>();

            foreach (var item in newsItemService.GetAll(true, true))
            {
                DynamicNode node = new DynamicNode();
                node.Title = item.Title;
                node.Action = "detail";
                node.RouteValues.Add("url", item.Url);
                returnValue.Add(node); 
            }

            return returnValue;
        }

web.config中的MvcSiteMapProvider符合标准,不会更改。

1 个答案:

答案 0 :(得分:0)

MvcSiteMapProvider v3有很多线程和缓存问题会导致这样的问题。 MvcSiteMapProvider v4不再存在这些问题,因为它现在具有更好的线程安全性,并且缓存的站点地图变为只读,因此一个用户的导航不会影响其他用户。