2011-06-20 23 views
2

我想从http://mvcsitemap.codeplex.com/使用MvcSiteMapProvider为我的网站生成面包屑路径。我有一些页面需要在URL中传递一个ID,所以我试图使用动态节点来完成此操作。但是,对于我声明为动态的所有节点,相应页面上不会显示面包屑。当我使用DynamicNodeProvider类中的断点进行调试时,我也遇到了一个有趣的错误。下面是类的基本版本,并在站点地图结点:在一个位置MVC站点提供商 - DynamicNodeProvider导致面包屑消失

public class UserSummaryDynamicNodeProvider : DynamicNodeProviderBase 
{ 
    private static ServiceClient proxy = new ServiceClient(); 
    List<User> users = proxy.GetUsers(); 

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection() 
    { 
     var nodes = new List<DynamicNode>(); 

     foreach (var user in users) 
     { 
      DynamicNode node = new DynamicNode(); 
      node.Key = "UserSummary"; 
      node.ParentKey = "UserMenu"; 
      node.RouteValues.Add("userID", user.ID); 

      nodes.Add(node); 
     } 

     return nodes; 
    } 
} 


<?xml version="1.0" encoding="utf-8" ?> 
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalizatoin="true"> 
    <mvcSiteMapNode title="Home" controller="Home" action="Index"> 
     <mvcSiteMapNode title="User Menu" controller="UserInfo" action="UserMenu"> 
      <mvcSiteMapNode title="User Summary" controller="UserInfo" action="UserSummary" dynamicNodeProvider="MySite.Users.DynamicNodeProviders.UserSummaryDynamicNodeProvider, MySite.Users" /> 
     </mvcSiteMapNode> 
    </mvcSiteMapNode> 
</mvcSiteMap> 

我得到的错误说:“没有源代码可用”,似乎是在寻找一个特定的C#源文件(MvcSiteMapNode.cs)我没有指定(c:\ Projects \ Codeplex \ TFS10 \ mvcsitemap \ Branches \ 3.1.0 \ src \ MvcSiteMapProvider \ MvcSiteMapProvider)。我从codeplex网站下载了这个DLL,这个类包含在库中,但是源文件并没有单独包含在下载中。我已经包含了适当的程序集引用(包括MvcSiteMapProvider和MvcSiteMapProvider.Extensibility)。我在这里错过了很明显的东西吗

这可能不是我唯一的问题。在我尝试使用动态节点之前,我尝试将[SiteMapPreserveRouteData]属性添加到我的操作结果中,但这也不起作用。在这种情况下,面包屑仍会出现,但路径中的ID参数都不会被保留。任何想法为什么不行?只是为了澄清,我使用MVC3和.NET 4.0

请让我知道如果我需要提供一些更多的信息。

回答

0

正如在CodePlex上提到的:尝试最新的3.1.0分支应该解决这个问题。

+0

嗨马尔滕巴,我试过3.1.0没有任何运气。你能确认哪个版本解决了这个问题吗? – Vincent