在NopCommerce 3.8的管理面板中添加子菜单

时间:2017-01-06 17:02:30

标签: asp.net-mvc nopcommerce nopcommerce-3.80

我正在从Pluralsight提供的教程中学习Nopcommerce。

在管理面板中添加插件菜单时,与版本3.5和3.8不同。没有public SiteMapNode BuildMenuItem() 相反,我们必须使用public void ManageSiteMap(SiteMapNode rootNode)

我根据NopCommerce How to add a menu item into the administration area from a plugin提供的文档使用了ManageSiteMap,但是使用该代码我只能显示父菜单而不是子菜单。

这是我的代码:

 
public void ManageSiteMap(SiteMapNode rootNode)
{
      var menuItem = new SiteMapNode()
      {
          Title = "Promo Slider",
          ControllerName = "PromoSlider",
          ActionName = "CreateUpdatePromoSlider",
          Visible = true,
          RouteValues = new RouteValueDictionary() { { "area", "admin" } }
      };
      var createUpdate = new SiteMapNode()
      {
          SystemName = "Widgets.PromoSlider",
          Title = "New Sliders",
          ControllerName = "PromoSlider",
          ActionName = "CreateUpdatePromoSlider",
          Visible = true,
         RouteValues = new RouteValueDictionary() { { "area", null } }
      };

      var manageSlider = new SiteMapNode()
      {
          SystemName = "Widgets.PromoSlider",
          Title = "Manage Sliders",
          ControllerName = "PromoSlider",
          ActionName = "ManagePromoSliders",
          Visible = true,
          RouteValues = new RouteValueDictionary() { { "area", null} }
      };
      menuItem.ChildNodes.Add(createUpdate);
      menuItem.ChildNodes.Add(manageSlider);

      var pluginNode = rootNode.ChildNodes.FirstOrDefault(x => x.SystemName == "Third party plugins");
      if (pluginNode != null)
          pluginNode.ChildNodes.Add(menuItem);
      else
          rootNode.ChildNodes.Add(menuItem);
}

但它显示的只是父菜单 enter image description here

我想像这样展示

插件
 | ---->促销滑块
| ----------->新滑块
| ----------->管理滑块

任何人都可以帮我解决我的代码。

1 个答案:

答案 0 :(得分:3)

您的代码需要一些修复:

  1. menuItem是父节点,不需要RouteValues
  2. 基本上,父节点需要SystemName
  3. 执行上部更改后,父节点应如下所示:

    var menuItem = new SiteMapNode
    {
        Title = "Promo Slider",
        Visible = true,
        SystemName = "Widgets.PromoSlider",
    };
    

    好的,现在来到子节点,你每次都要创建新节点......而不是添加到父节点!

    var createUpdate = new SiteMapNode()
    var manageSlider = new SiteMapNode()
    

    所以,将其改为:

    menuItem.ChildNodes.Add(new SiteMapNode
    {
        SystemName = "Widgets.PromoSlider",
        Title = "New Sliders",
        ControllerName = "PromoSlider",
        ActionName = "CreateUpdatePromoSlider",
        Visible = true,
        RouteValues = new RouteValueDictionary() { { "area", null } }
    });
    
    menuItem.ChildNodes.Add(new SiteMapNode
    {
        SystemName = "Widgets.PromoSlider",
        Title = "Manage Sliders",
        ControllerName = "PromoSlider",
        ActionName = "ManagePromoSliders",
        Visible = true,
        RouteValues = new RouteValueDictionary() { { "area", null } }
    });
    

    最后,将父节点添加到插件节点:

    var pluginNode = rootNode.ChildNodes.FirstOrDefault(x => x.SystemName == "Third party plugins");
    if (pluginNode != null)
        pluginNode.ChildNodes.Add(menuItem);
    else
        rootNode.ChildNodes.Add(menuItem); 
    

    全部完成!运行它,它将显示您想要的。

    enter image description here