【问题标题】:MvcSiteMap: Dynamic node provider not reachedMvcSiteMap:未到达动态节点提供程序
【发布时间】:2012-11-04 04:07:27
【问题描述】:

我创建了一个使用属性定义节点的项目,并将其设置在 web.config 中以扫描属性,它工作正常。
我根本不使用 XML 文件。

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

我已经阅读了documentation,但我真的不知道该放在哪里:

<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();
}

【问题讨论】:

  • 您是否按照here的详细说明进行操作?
  • @Mightymuke 我以前读过。问题已更新。
  • 看看这个(半相关的)问题 - 它可能会给出一些指示:stackoverflow.com/questions/6169694/…
  • 很抱歉,上面的 cmets 不是那么好(这里是凌晨 3 点)。我快速浏览了一下,如果没有 XML 文件中的站点地图节点,您似乎无法做到这一点,因为它提供了节点模板和对动态节点提供程序的引用。但是我以前从未使用过动态节点,所以很可能是错误的。
  • @Mightymuke,我说我不介意使用 XML。问题是根菜单(和其他菜单)都是在属性中定义的,所以我不知道在 XML 文件中写什么。

标签: asp.net-mvc mvcsitemapprovider asp.net-mvc-sitemap


【解决方案1】:

你可以在控制器方法属性中定义它(并且根本不使用XML)吗?

例如:

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

【讨论】:

  • 它不起作用。我错过了什么吗?我应该将该属性放在哪个控制器上?你能解释一下它应该如何工作吗?我错过了什么吗?我在我的问题中添加了一个示例,请查看。谢谢
  • 我以前从未使用过DynamicNodeProvider,但我很快就会看一下,看看我是否可以让它与您的设置一起使用。
  • 因您的努力以及在MvcSiteMapNodeAttribute 中找到DynamicNodeProvider 属性而获得奖励。我没有意识到这一点。
【解决方案2】:
  1. 似乎dynamicNodeProvider 属性在根节点中被忽略了,当它在属性中定义时也是如此。
    因此,在根目录下添加动态节点提供程序的唯一方法是通过在虚拟操作等上指定它或使用 XML。
  2. 一个有趣的说明:在 XML 中定义和属性之间的实际区别在于,如果在属性中定义,它(即生成菜单项)将在菜单中最后,而在 XML 中定义时,它将紧随其后根项(我猜应该是 Home),请注意,这仍然可以通过属性中的 Order 属性进行控制。
  3. 在我的 Web.Config 中,我将 siteMapFile 留空,依赖于它在 wiki 页面中所说的,默认值为 ~/Web.sitemap,实际上这是错误的(我已经更正了在更新后的wiki)。
    我不认为这种行为应该是这样的,我认为 MvcSiteMap 引擎应该像扫描动态节点属性一样扫描动态节点提供程序(here is the issue我在网站上发布)。

【讨论】:

  • 太棒了 - 很高兴你解决了这个问题。好吧,反正半解决了。
猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
相关资源
最近更新 更多