菜单项定义顺序
MenuItemDefinition Order
我开始使用 ASP.NET 样板,我正在使用 ASP.NET 核心多页面 Web 应用程序的免费启动模板。
我的问题是关于左侧导航栏的。我的项目中有 NavigationProvider
,其中实现了抽象 class。我一直在测试 MenuItemDefinition
中可用的一些属性,特别是 order
和 isVisible
。我的期望是我可以同时设置 order
和 isVisible
属性,并且这会在 运行 时显示在应用程序中。但是,我没有看到这些属性中的任何一个实际用于设置菜单项的顺序或控制它们的可见性。
对于订单 属性,我更新了 SideBarNav
组件的 Default.cshtml 以实现 OrderBy
,这样我就可以获得正确的订单。这可行,但我不确定这是否是推荐的方法。
添加 MenuItemDefinition
时设置顺序是否对 运行 应用程序实际上没有任何影响并且这个 属性 在这里是我期望的实现我在 Default.cshtml?
中所做的行为
我想要以这种方式控制顺序而不是仅仅通过添加项目的顺序的原因与创建不同的模块有关,每个模块都有自己的 NavigationProvider。
Is it correct that setting the order when adding a MenuItemDefinition doesn't actually have any consequence to the running application and that this property is here with the expectation that I implement the behavior as I've done in the 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 的 AdminBSB UI,因此以下更改不兼容。
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/Views/Shared/Components/SideBarMenu/Default.cshtml
- Web.Mvc/Views/Shared/Components/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/Views/Shared/Components/SideBarNav/Default.cshtml
我开始使用 ASP.NET 样板,我正在使用 ASP.NET 核心多页面 Web 应用程序的免费启动模板。
我的问题是关于左侧导航栏的。我的项目中有 NavigationProvider
,其中实现了抽象 class。我一直在测试 MenuItemDefinition
中可用的一些属性,特别是 order
和 isVisible
。我的期望是我可以同时设置 order
和 isVisible
属性,并且这会在 运行 时显示在应用程序中。但是,我没有看到这些属性中的任何一个实际用于设置菜单项的顺序或控制它们的可见性。
对于订单 属性,我更新了 SideBarNav
组件的 Default.cshtml 以实现 OrderBy
,这样我就可以获得正确的订单。这可行,但我不确定这是否是推荐的方法。
添加 MenuItemDefinition
时设置顺序是否对 运行 应用程序实际上没有任何影响并且这个 属性 在这里是我期望的实现我在 Default.cshtml?
我想要以这种方式控制顺序而不是仅仅通过添加项目的顺序的原因与创建不同的模块有关,每个模块都有自己的 NavigationProvider。
Is it correct that setting the order when adding a MenuItemDefinition doesn't actually have any consequence to the running application and that this property is here with the expectation that I implement the behavior as I've done in the 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 的 AdminBSB UI,因此以下更改不兼容。
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/Views/Shared/Components/SideBarMenu/Default.cshtml
- Web.Mvc/Views/Shared/Components/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/Views/Shared/Components/SideBarNav/Default.cshtml