MenuItemDefinition Заказать - PullRequest
       32

MenuItemDefinition Заказать

1 голос
/ 20 февраля 2020

Я начинаю с ASP. NET Boilerplate, где я использую бесплатный шаблон запуска ASP. NET Базовое многостраничное веб-приложение.

Мой вопрос относительно левой навигационной панели. У меня есть NavigationProvider в моем проекте, где реализован абстрактный класс. Я тестировал некоторые свойства, доступные в MenuItemDefinition, в частности order и isVisible. Я ожидал, что смогу установить свойства order и isVisible, и это будет отображаться в приложении при запуске. Однако я не вижу ни одного из этих свойств, фактически используемых для установки порядка элементов меню или управления их видимостью.

Для свойства заказа я обновил Default.cs html из SideBarNav компонент для реализации OrderBy, чтобы я мог получить правильный заказ. Это работает, но я не уверен, что это рекомендуемый подход.

Правильно ли, что установка порядка при добавлении MenuItemDefinition на самом деле не имеет никакого значения для работающего приложения и что это свойство здесь с ожиданием того, что я реализую поведение, как я сделал в Default.cs html?

Моя причина для желания управлять порядком таким образом, а не просто порядком добавления элементов, связанные с созданием различных модулей, каждый из которых имеет свои собственные NavigationProviders.

1 Ответ

0 голосов
/ 22 февраля 2020

Правильно ли, что установка порядка при добавлении MenuItemDefinition на самом деле не имеет никакого значения для работающего приложения, и что это свойство находится здесь с ожиданием того, что я реализую поведение, как я сделал в Default .cs html?

Да, шаблоны (начиная с версии 5.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 вместо AdminBSB для пользовательского интерфейса MVC, поэтому следующие изменения несовместимы.

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.cs html
  • Web.Mvc / Views / Shared / Components / SideBarMenu / _MenuItem.cs html

v5.1.x и ниже

Обратите внимание, что в Default.cs html.

@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())
* 1038 вы должны измениться в 3 местах (что соответствует 3 уровням вложенности) * Файл изменен:
  • Web.Mvc / Views / Shared / Components / SideBarNav / Default.cs html
...