我正在从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);
}
我想像这样展示
插件
| ---->促销滑块
| ----------->新滑块
| ----------->管理滑块
任何人都可以帮我解决我的代码。
答案 0 :(得分:3)
您的代码需要一些修复:
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);
全部完成!运行它,它将显示您想要的。