我正在尝试使用http://mvcsitemap.codeplex.com/中的MvcSiteMapProvider为我的网站生成面包屑跟踪。我有一些页面需要在URL中传递ID,所以我尝试使用动态节点来完成此任务。但是,对于我声明为动态的所有节点,相应页面上不会出现任何面包屑。当我在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>
我得到的错误是“No Source Available”并且似乎在我未指定的位置寻找特定的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 :(得分:0)
如CodePlex所述:尝试最新的3.1.0分支,这应该解决这个问题。