我开始使用ASP.NET Boilerplate,我正在使用ASP.NET Core多页Web应用程序的免费启动模板。
我的问题是关于左侧导航栏。我的项目中有NavigationProvider
,其中实现了抽象类。我一直在测试MenuItemDefinition
中可用的一些属性,特别是order
和isVisible
。我的期望是可以同时设置order
和isVisible
属性,并且这将在运行时显示在应用程序中。然而,我没有看到这些属性中的任何一个实际上被用来设置菜单项的顺序或控制它们的可见性。
对于order属性,我更新了SideBarNav
组件的Default.cshtml以实现OrderBy
,这样我就可以获得正确的顺序。这是有效的,但我不确定这是否是推荐的方法。
添加MenuItemDefinition
时设置顺序实际上不会对正在运行的应用程序产生任何影响,并且此属性在这里的目的是希望我像在Default.cshtml中所做的那样实现行为,这正确吗?
我之所以希望通过这种方式控制订单,而不仅仅是通过添加项目的顺序,是因为我创建了不同的模块,每个模块都有自己的NavigationProviders。
添加MenuItemDefinition时设置顺序实际上不会对正在运行的应用程序产生任何影响,并且该属性在这里的目的是希望我像在Default.cshtml中那样实现行为,这正确吗?
是的,模板(自v.2.0起(不使用也不实现用户菜单项的排序。
我建议实现一种扩展方法,以便在整个项目中轻松更改顺序。
public static IOrderedEnumerable<UserMenuItem> OrderByCustom(this IEnumerable<UserMenuItem> menuItems)
{
return menuItems
.OrderBy(menuItem => menuItem.Order)
.ThenBy(menuItem => menuItem.DisplayName);
}
关于版本:您使用的是v5.1.x及以下版本 我已经提交了一份PR来实现订单:aspnetboileplate/模块零核心模板#510 文件已更改: 请注意,您应该在Default.cshtml.中的3个位置(对应于3个嵌套级别(进行更改 文件已更改:v5.2+
var orderedMenuItems = Model.MainMenu.Items.Where(x => x.IsVisible).OrderByCustom().ToList();
var subMenus = Model.Items.Where(x => x.IsVisible).OrderByCustom().ToList();
v5.1.x及以下版本
@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())