【问题标题】:MvcSiteMapProvider not working with simple MVC.SiteMap fileMvcSiteMapProvider 不适用于简单的 MVC.SiteMap 文件
【发布时间】:2011-01-28 04:44:42
【问题描述】:

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

<?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 样本中,它会再次中断。对这个有帮助吗?

【问题讨论】:

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


    【解决方案1】:

    这很可能意味着该 WhyBuy 节点的 URL 与其他一些 URL 相同。也许您可以发布您的路线?

    【讨论】:

    • 我也想到了这一点并检查了我的路线,但它们都是独一无二的。无论我在“为什么要购买您的新家”节点所在的位置放置什么额外节点,都会发生这种情况。我只是出于演示目的选择了那个。
    • @Scott Schluer - Hrm,很确定它是这样的。我以前遇到过这个问题,这就是问题所在。还有另一个欺骗键问题,在内部 MvcSitemap 使用 controller_action_title 索引或其他东西键值。也许这就是问题?我仍然非常确信它的网址和您的路线是问题所在。
    • 我会再把所有的东西都检查一遍,也许会更仔细一点,看看我是否找不到什么东西。奇怪的是,它只使用一个“Home”和一个辅助节点来执行此操作,无论该节点是什么。感谢您的帮助,我有机会再检查一下时会回复。
    • 好的,所以我将我的路线剥离到站点地图中引用的两个,并将站点地图剥离到这两个节点。仍然得到同样的错误。 :-
    【解决方案2】:

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

    咕噜……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2021-06-02
      • 2015-01-21
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多