Asp.net mvc 在NopCommerce 3.8的管理面板中添加子菜单

Asp.net mvc 在NopCommerce 3.8的管理面板中添加子菜单,asp.net-mvc,nopcommerce,nopcommerce-3.80,Asp.net Mvc,Nopcommerce,Nopcommerce 3.80,我正在学习Pluralsight提供的教程 在管理面板中为插件添加菜单时,它与3.5版和3.8版不同。没有公共SiteMapNode BuildMenuItem() 相反,我们必须使用public void ManageSiteMap(SiteMapNode rootNode) 根据NopCommerce提供的文档,我使用了ManageSiteMap,但通过使用该代码,我只能显示父菜单,而不能显示子菜单 这是我的代码: public void ManageSiteMap(SiteMapNode

我正在学习Pluralsight提供的教程

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

根据NopCommerce提供的文档,我使用了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);
}
但它显示的只是父菜单

我想表现得像这样

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


任何人都可以帮我修改代码。

您的代码需要一些修复:

  • menuItem
    是父节点,不需要
    routeValue
  • 基本上,父节点需要
    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 } }
    });
    
    最后,将父节点添加到插件节点:

    var pluginNode = rootNode.ChildNodes.FirstOrDefault(x => x.SystemName == "Third party plugins");
    if (pluginNode != null)
        pluginNode.ChildNodes.Add(menuItem);
    else
        rootNode.ChildNodes.Add(menuItem); 
    
    全部完成!运行它,它将显示为您想要的


    非常感谢您。信息技术Works@Div,我的问题几乎是一样的,我想在“促销”下添加此子菜单,我如何才能做到?Hi@Div。这是可以做到的。请查收