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