4

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

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

我已经阅读了文档,但我真的不知道在哪里放置这一行:

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

它应该指向什么动作?此外,如上所述,根元素是使用属性定义的,所以我的问题是是否有办法避免使用 XML,或者声明 XML 的有效方法(越少越好)以包含我的动态提供程序。

更新

我已经尝试了以下方法,但仍未到达节点提供程序(From HomeController.cs)。

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

2 回答 2

2

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

例如:

[MvcSiteMapNode(Title="Details", 
  DynamicNodeProvider = "Project.StoreDetailsDynamicNodeProvider, Project")]
public ActionResult Index()
{
    return View();
}
于 2012-11-22T02:56:14.680 回答
1
  1. 似乎该dynamicNodeProvider属性在根节点中被忽略,当它在属性中定义时也是如此。
    因此,在根目录下添加动态节点提供程序的唯一方法是通过在虚拟操作等上指定它或使用 XML。
  2. 一个有趣的说明:在 XML 中定义和属性之间的实际区别在于,如果它在属性中定义,它(即 gen.menu 项)将在菜单中的最后一个,而在 XML 中定义时,它将在根项之后(我猜那是 Home),请注意,这仍然可以通过Order属性中的属性进行控制。
  3. 在我的 Web.Config 中,我留下了siteMapFile空白,依赖于它在wiki页面中所说的,默认值是~/Web.sitemap,实际上这是错误的(我已经在更新的wiki中更正了它)。
    我不认为这种行为应该是这样的,我认为 MvcSiteMap 引擎应该像扫描动态节点属性一样扫描动态节点提供程序(这是我在网站上发布的问题)。
于 2012-11-22T22:52:12.303 回答