2

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

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

4

1 回答 1

0

正如 CodePlex 中提到的:尝试最新的 3.1.0 分支,它应该可以解决这个问题。

于 2011-07-12T13:42:36.383 回答