MvcSiteMapProvider不使用简单的MVC.SiteMap文件

时间:2011-01-26 16:17:17

标签: c# asp.net-mvc model-view-controller sitemap mvcsitemapprovider

所以这有点奇怪。我有一个非常简单的站点地图(简化为调试的简单性 - 实时版本要复杂得多):

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalization="false">
  <mvcSiteMapNode title="Home" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal">
    <mvcSiteMapNode title="Why Buy Your New Home" Controller="WhyBuyYourNewHome" Action="Index" />
  </mvcSiteMapNode>
</mvcSiteMap>

当我尝试加载页面时,出现以下错误:

An item with the same key has already been added.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: An item with the same key has already been added.

Source Error:

Line 75:             else
Line 76:             {
Line 77:                 returnValue = UrlHelper.Action(action, controller, new RouteValueDictionary(routeValues));
Line 78:             }
Line 79: 


Source File: C:\sitemap\Branches\3.0.0\MvcSiteMapProvider\MvcSiteMapProvider\DefaultSiteMapNodeUrlResolver.cs    Line: 77 

奇怪的是,如果我删除“为什么购买你的新家”节点,它就有效。此外,以下工作正常并加载我的所有动态节点:

    <?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" changeFrequency="Always" updatePriority="Normal">
        <mvcSiteMapNode title="Find Your New Home" controller="FindYourNewHome" action="Index">
          <mvcSiteMapNode title="Markets" action="Market" updatePriority="Critical" dynamicNodeProvider="MyProject.MVC.Extensions.SiteMap.SiteMapMarketNodeProvider, MyProject.MVC.Extensions">
            <mvcSiteMapNode title="Communities" action="Community" updatePriority="High" dynamicNodeProvider="MyProject.MVC.Extensions.SiteMap.SiteMapCommunityNodeProvider, MyProject.MVC.Extensions">
              <mvcSiteMapNode title="Driving Directions" action="DrivingDirections" updatePriority="High" dynamicNodeProvider="MyProject.MVC.Extensions.SiteMap.SiteMapDrivingDirectionsNodeProvider, MyProject.MVC.Extensions" />
              <mvcSiteMapNode title="Floorplans" action="Floorplan" updatePriority="High" dynamicNodeProvider="MyProject.MVC.Extensions.SiteMap.SiteMapFloorplanNodeProvider, MyProject.MVC.Extensions" />          
            </mvcSiteMapNode>
          </mvcSiteMapNode>
        </mvcSiteMapNode>
      </mvcSiteMapNode>
</mvcSiteMap>

似乎只是当我添加非常简单的节点时,我得到了这个重复的键错误,但是如果你查看我的第一个XML示例,那么就没有重复的键可能。如果我将“Why Buy Your New Home”节点添加到包含动态节点提供程序的最后一个XML示例中,它会再次中断。对此有何帮助?

2 个答案:

答案 0 :(得分:1)

这很可能意味着该WhyBuy节点和其他URL的URL是相同的。也许你可以发布你的路由?

答案 1 :(得分:1)

所以它最终成为我在XML中大写“Controller”和“Action”属性的事实。这导致所有节点落入我的“catchall”路径,所以从技术上讲,我的所有站点地图节点都匹配一条路线。

...哎呀