MvcSiteMap:动态节点提供商没有达到(MvcSiteMap: Dynamic node pr

2019-07-03 20:13发布

我创建的节点使用属性来定义一个项目,我将它设置在web.config扫描属性,并能正常工作。
我完全不使用的XML文件。

现在,我想添加一个动态节点提供商,我该怎么办呢?
有没有办法做到这一点没有XML(.sitemap)文件?
我需要确保它的根,它已经在代码中使用了设置下MvcSiteMapNodeAttribute属性。

我读过的文档 ,我真的不能弄清楚在何处放置这行:

<mvcSiteMapNode
  title="Details" action="Details"              
  dynamicNodeProvider="Project.StoreDetailsDynamicNodeProvider, Prject" />

难道这就是什么行动指向? 此外如上面所说的,根元素使用属性定义,所以我的问题是,如果有是为了避免XML的方式,或者有什么声明XML(越少越好),包括我的动态提供了有效的途径。

更新

我试过以下和节点提供商仍然没有达到( 从HomeController.cs)。

[MvcSiteMapNode(Title = "Home", Key = HomeMenuKey,
  DynamicNodeProvider = "Project.Namespace.NodeProvider, Assembly")]
public ActionResult Index()
{
  return View();
}

Answer 1:

你可以在控制器方法的属性定义它(而不是使用XML的话)?

例如:

[MvcSiteMapNode(Title="Details", 
  DynamicNodeProvider = "Project.StoreDetailsDynamicNodeProvider, Project")]
public ActionResult Index()
{
    return View();
}


Answer 2:

  1. 似乎dynamicNodeProvider属性在根节点忽略不计,也当它在属性的已定义。
    所以只有这样才能在根目录下添加一个动态节点提供者,或者是通过指定它上的虚设动作等,或使用XML。
  2. 一个有趣的注意:在XML定义和属性之间的实际区别是,如果它在属性中已定义,这将是最后一次在菜单中,而在XML定义时,它会根项目之后(即根菜单项。) (我想这将是家庭),请注意,这仍然是通过控制Order的属性属性。
  3. 在我的web.config,我离开了siteMapFile空,它在说依靠维基页面,默认值是~/Web.sitemap ,其实这是错误的(我已经修正,在更新维基 ) 。
    我不认为这种行为应该是这样的,我的确认为MvcSiteMap引擎应该扫描动态节点商只是因为它扫描动态节点属性( 在这里是问题我张贴在网站上)。


文章来源: MvcSiteMap: Dynamic node provider not reached