MenuItemDefinition Order

问题描述 投票:1回答:1

我正在使用ASP.NET Boilerplate入门,正在使用ASP.NET Core多页Web应用程序的免费启动模板。

我的问题是关于左侧导航栏。我的项目中有实现抽象类的NavigationProvider。我已经测试了MenuItemDefinition中的某些可用属性,特别是orderisVisible。我的期望是,我可以同时设置orderisVisible属性,并且该属性在运行时将显示在应用程序中。但是,我看不到这些属性中的任何一个实际上用于设置菜单项的顺序或控制其可见性。

对于订单属性,我更新了SideBarNav组件的Default.cshtml以实现OrderBy,以便可以获取正确的订单。这可以,但是我不确定这是否是推荐的方法。

是否正确,添加MenuItemDefinition时设置顺序实际上不会对正在运行的应用程序产生任何影响,并且此属性位于此处并期望我像在Default.cshtml中那样实现行为?

我想以这种方式控制顺序而不是仅通过添加项目的顺序来控制顺序的原因与创建不同的模块有关,每个模块都有自己的NavigationProviders。

sorting asp.net-core navigation aspnetboilerplate
1个回答
0
投票

是否正确,在添加MenuItemDefinition时设置顺序实际上不会对正在运行的应用程序产生任何影响,并且此属性位于此处并期望我像在Default.cshtml中那样实现行为。] >

是的,模板(从v5.2.0开始)不使用也不实现用户菜单项的排序。

我建议实现一种扩展方法,以轻松更改整个项目的顺序。

public static IOrderedEnumerable<UserMenuItem> OrderByCustom(this IEnumerable<UserMenuItem> menuItems)
{
    return menuItems
        .OrderBy(menuItem => menuItem.Order)
        .ThenBy(menuItem => menuItem.DisplayName);
}

关于版本

:您正在使用v5.1.x及以下版本。从v5.2.0开始,已将模板迁移为使用AdminLTE 3而不是MVC UI的AdminBSB,因此以下更改不兼容。

v5.2 +

我已提交PR来实施订购:aspnetboilerplate/module-zero-core-template#510

var orderedMenuItems = Model.MainMenu.Items.Where(x => x.IsVisible).OrderByCustom().ToList();
var subMenus = Model.Items.Where(x => x.IsVisible).OrderByCustom().ToList();

文件已更改:

  • Web.Mvc /视图/共享/组件/SideBarMenu/Default.cshtml
  • Web.Mvc /视图/共享/组件/SideBarMenu/_MenuItem.cshtml
  • v5.1.x及以下版本

请注意,您应该在Default.cshtml中的3个位置(对应于3个嵌套级别)中进行更改。

@foreach (var menuItem in Model.MainMenu.Items.OrderByCustom().ToList())
@foreach (var subMenuItem in menuItem.Items.OrderByCustom().ToList())
@foreach (var subSubMenuItem in subMenuItem.Items.OrderByCustom().ToList())

文件已更改:

  • Web.Mvc /视图/共享/组件/SideBarNav/Default.cshtml
© www.soinside.com 2019 - 2024. All rights reserved.