我为名为MenuItemLink-main-menu-MainNavigation-MenuItem.cshtml
的主菜单创建了一个替代品,因为我想在名为主导航的区域中以不同方式呈现菜单。 vs其他地方我在页面上使用相同的菜单,如页脚。我复制MenuItem
形状并在每次运行时重命名它(MenuItemLink-main-menu-MainNavigation-MenuItem.cshtml
)我因为下面的行而得到溢出。
var renderedMenuItemLink = Display(Model);
有人可以向我解释为什么会发生这种情况,以及为导航创建基于区域的形状的最佳方法。
答案 0 :(得分:1)
您从一个形状(MenuItem)复制了标记并将其粘贴到另一个形状(MenuItemLink)。
为MenuItemLink添加备用内部主题:
首先。为菜单小部件创建备用(Parts.MenuWidget.cshtml)
@using Orchard.ContentManagement;
@using Orchard.Widgets.Models;
@{
var widgetPart = ((IContent)Model.ContentItem).As<WidgetPart>();
Model.Menu.Zone = widgetPart.Zone;
}
二。为菜单项(MenuItem.cshtml)创建备用项并添加一行(在行Model.Metadata.Type =&#34; MenuItemLink&#34 ;;之后)
Model.Metadata.Type = "MenuItemLink";
(Model as Orchard.DisplayManagement.Shapes.Shape).Metadata.OnDisplaying(action =>
action.ShapeMetadata.Alternates.Add("MenuItemLink__Zone__" + (string)Model.Menu.Zone)
);
为MenuItem添加替代内部主题:
首先。为菜单小部件创建备用(Parts.MenuWidget.cshtml)
@using Orchard.ContentManagement;
@using Orchard.Widgets.Models;
@using Orchard.DisplayManagement.Shapes;
@{
var widgetPart = ((IContent)Model.ContentItem).As<WidgetPart>();
var items = Model.Menu.Items as List<dynamic>;
AddMenuItemAlternate(items, widgetPart.Zone);
}
@functions{
public void AddMenuItemAlternate(List<dynamic> items, string zoneName)
{
foreach (var item in items)
{
item.Metadata.Alternates.Add("MenuItem__Zone__" + zoneName);
var subitems = (List<dynamic>)Enumerable.Cast<dynamic>(item.Items);
AddMenuItemAlternate(subitems, zoneName);
}
}
}
更新2015.08:
我创建模块,为菜单,menuItem和菜单项链接形状添加小部件名称和区域名称。您可以从果园图库https://gallery.orchardproject.net/List/Modules/Orchard.Module.MainBit.Navigation
下载一个