MVC站点地​​图提供程序 - DynamicNodeProvider导致面包屑消失

时间:2011-06-20 14:55:01

标签: asp.net-mvc-3 sitemap breadcrumbs mvcsitemapprovider

我正在尝试使用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

如果我需要提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

如CodePlex所述:尝试最新的3.1.0分支,这应该解决这个问题。