0

我一直在思考这个问题几个小时,在我看来,虽然 XML 站点地图功能已更新为接受具有 URL 属性的外部 URL,但该功能并未通过 DynamicNode 扩展到动态定义。

我们有几个共享一个菜单的应用程序,因此我们需要对这些菜单项进行单一定义,每个都指向我们在 Intranet 中的一个应用程序。我们目前使用(对于 ASP.NET)一个自定义站点地图,该地图需要将 XML 文件部署到每个应用程序,并且我希望 MVC 实现能够动态读取项目 - 可能来自数据库。

由于 DynamicNode 没有 URL 属性,它显然要求路径是虚拟的并且基于其他属性(控制器、操作、路由)。我尝试实现一个 UrlResolver 来查看“HTTP”的“动作”,它有效,并且我返回了 URL 不变。然而,我收到了可怕的

http://site.com/App不是有效的虚拟路径。”

错误。看来作者在 3.1.0 中为 XML 属性引入的更改并未转化为动态等效项。谁能帮我?这是我为扩展默认类而编写的代码。此代码已执行并且工作正常。在 ResolveUrl 返回我的 HTTP 后的某个时间,失败发生了,所以我想我要么遗漏了某些东西,要么无法完成。

   public class DynamicSiteMapNodeProvider : DynamicNodeProviderBase
    {
        override public IEnumerable<DynamicNode> GetDynamicNodeCollection()
        {
            var nodes = new List<DynamicNode>();
            nodes.Add(new DynamicNode
                {
                    Key = "Dynamic1",
                    Title = "Dynamic One!",
                    Action = "http://my.site.com/MyApp"

                });
            return nodes;

        }
    }

    public class FlexibleSiteMapUrlResolver: DefaultSiteMapNodeUrlResolver
    {
        public override string ResolveUrl(MvcSiteMapNode mvcSiteMapNode, string area, string controller, string action, IDictionary<string, object> routeValues)
        {
            // when action value is clearly a web site url, simply accept it.
            if (action.Substring(0, 5).ToLower() == "http:")
            {
                return action;
            }
            return base.ResolveUrl(mvcSiteMapNode, area, controller, action, routeValues);
        }
    }

2013 年 5 月 15 日:没有人可以帮助解决这个问题吗?

4

1 回答 1

0

这在版本 4 中已修复 - URL 属性已添加到 DynamicNode 对象,并且与其他任何地方的工作方式相同。

第 4 版在几周前发布,可在NuGet上使用。

于 2013-08-11T19:24:35.677 回答