我正在尝试使用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>
我得到的错误是“没有可用的源”,似乎是在我没有指定的位置(c:\Projects\Codeplex\TFS10\mvcsitemap\Branches\3.1. 0\src\MvcSiteMapProvider\MvcSiteMapProvider)。我从 codeplex 站点下载了 dll,这个类包含在库中,但源文件没有单独包含在下载中。我已经包含了适当的程序集引用(MvcSiteMapProvider 和 MvcSiteMapProvider.Extensibility)。我在这里遗漏了一些明显的东西吗?
这可能不是我唯一的问题。在尝试使用动态节点之前,我尝试将 [SiteMapPreserveRouteData] 属性添加到我的操作结果中,但这也不起作用。在这种情况下,面包屑仍会出现,但不会保留路由中的任何 ID 参数。任何想法为什么这不起作用?澄清一下,我使用的是 MVC3 和 .NET 4.0
如果我需要提供更多信息,请告诉我。