我一直在思考这个问题几个小时,在我看来,虽然 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 日:没有人可以帮助解决这个问题吗?