2012-08-06 66 views
4

使用Orchard cms 1.5.1我创建了一个模块,其中包含从Web服务获取列表的控制器。 我想在启用此模块时在主菜单中添加一个菜单项。对于我创建 的MainMenu如下:通过INavigationProvider将菜单项添加到主菜单,但它不会显示?

public class MainMenu:INavigationProvider 
{ 
    public Localizer T { get; set; } 
    public String MenuName 
    { 
     get { return "main"; } 
    } 
    public void GetNavigation(NavigationBuilder builder) 
    { 
     builder.Add(menu => menu.Add(T("Fetched List"), "4", item => item.Action("Index", "FetchedList"))); 
    } 
} 

启用我的模块,导航功能就无法显示菜单项。难道我做错了什么?

+0

当你在GetNavigation中放置一个断点时,它会受到影响吗? – 2012-08-06 12:25:49

+0

MainMenu中的GetNavigation不会受到影响。 另外,Orchard.UI.Navigation.NavigationManager中的IEnumerable BuildMenu(字符串menuName)仅作为menuName命中'admin'。 – timoffei 2012-08-06 13:40:04

+1

由于没有更多Orchard.Core.Navigation.Services.MainMenuNavigationProvider寻找“主要”,正如Piotr Szmyd在他的文章http://www.szmyd.com.pl/blog/building-multi-level- menu-for-orchard#.UB_jQPbN8u8我认为实现INavigationProvider将菜单项连接到主菜单已经过时了。我应该使用IMenuProvider吗? – timoffei 2012-08-06 15:35:48

回答

5

从Orchard 1.5.0起,INavigationProvider不用于在前端构建菜单(它仍然用于构建Dashboard的管理菜单)。您需要执行IMenuProviderINavigationFilterSee this post on David Hayden's blog for some pointers。您还可以在Orchard.ProjectionsOrchard.CulturePicker中找到很好的示例。

+0

实现INavigationFilter以添加菜单项似乎不是正确的做法,因为它或者看起来像一个过滤器。 Orchard.Core.Navigation.Services.DefaultMenuProvider像应该那样实现IMenuProvider,但是如果我实现它并且有多个菜单根,我的模块会将项目附加到它们中的所有项目。有什么建议么? – timoffei 2012-08-06 16:17:39

+0

正确,'IMenuProvider'用于向菜单中添加全新的项目,而'INavigationFilter'用于扩展像NavigationQueryMenuItem这样的内容项到它的组成部分(例如,如果使用投影来填充菜单的一部分) ,这真的取决于你想如何注入你的菜单项。 'IMenuProvider.GetMenu()'带有'menu'参数,你不能用它来区分根菜单吗? – mdm 2012-08-06 16:38:01

+0

将尝试它。感谢Matt和Bertrand提供的宝贵意见。 – timoffei 2012-08-06 18:01:42

相关问题