MvcSiteMapProvider不更新站点地图标题

时间:2012-06-08 16:53:03

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

我目前正在使用MVCSiteMapProvider为我的网站生成Breadcrumb。我通过在SiteMapTitle属性中传递viewData值来创建站点地图标题。当我第一次访问链接时,它会根据需要创建breadCrumb,但是当我尝试重新访问我网站上的任何其他链接时,它会显示Viewdata的第一个访问值。代码看起来像这样

[SiteMapPreserveRouteData] 
    [SiteMapTitle("atlas")]
    public ActionResult Index(string id ,string Atlas)
    {
        if (!string.IsNullOrEmpty(Atlas))
        {
            ViewData["atlas"] = Atlas;
        }
        Taxonomy taxonomy = db.GetTaxonomy(new Guid(ConfigurationManager.AppSettings["TherapyId"]));

        var atlasList = taxonomy.GetTerms(id, 2);

        return View(atlasList);
    }

网站地图如下所示

<mvcSiteMapNode title="Home" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal" >

<mvcSiteMapNode title="Therapy"  controller="Therapy" action="Index"  >
  <mvcSiteMapNode title=""  controller="Atlas" action="Index" >
    <mvcSiteMapNode title=""  controller="Specialties" action="Index">
      <mvcSiteMapNode title=""  controller="Specialties" action="ViewImage"  />      
    </mvcSiteMapNode>        
  </mvcSiteMapNode>
</mvcSiteMapNode>

任何帮助都将受到高度赞赏

2 个答案:

答案 0 :(得分:0)

这可能是因为提供程序实现了缓存。您可以尝试尝试将cacheduration(在web.config中)设置为0,以禁用缓存,但这会对性能产生很大影响。

答案 1 :(得分:0)

您应该升级到MvcSiteMapProvider v4。这是一个缓存错误,现已修复。此外,您不应使用SiteMapPreserveRouteDataAttribute,因为它现在已被弃用。为了保留路由值,您应该在ISiteMapNode对象上使用savedRouteParameters。

有关如何使用savedRouteParameters的示例,请参阅标题为How to Make MvcSiteMapProvider Remember a User's Position的博客文章。