在 NopCommerce 3.8 的管理面板中添加子菜单
Add Submenu in admin panel in NopCommerce 3.8
我正在通过 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);
}
但它只显示父菜单
我想这样展示
插件
|---->促销滑块
|------------> 新滑块
|------------> 管理滑块
任何人都可以帮助我的代码。
您的代码需要一些修复:
menuItem
是父节点,不需要RouteValues
.
- 基本上父节点需要
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);
大功告成! 运行 它会随心所欲地显示。
我正在通过 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);
}
但它只显示父菜单
我想这样展示
插件
|---->促销滑块
|------------> 新滑块
|------------> 管理滑块
任何人都可以帮助我的代码。
您的代码需要一些修复:
menuItem
是父节点,不需要RouteValues
.- 基本上父节点需要
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);
大功告成! 运行 它会随心所欲地显示。