3

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

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

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

这是我的代码:

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

但它只显示父菜单 在此处输入图像描述

我想这样展示

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

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

4

1 回答 1

3

您的代码需要一些修复:

  1. menuItem是父节点,不需要RouteValues
  2. 基本上,父节点需要SystemName

进行上层更改后,父节点应如下所示:

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

最后,将父节点添加到 Plugins 节点:

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

全部完成!运行它,它会如你所愿显示。

在此处输入图像描述

于 2017-01-07T08:07:19.013 回答