MvcSiteMap генерирует меню без испорчения сухарей

Я настраиваю приложение asp.net mvc 5 для использования библиотеки MvcSiteMap. Таким образом, далеко я мог бы успешно настроить хлебные кролики.
Тем не менее, шаблон для меню довольно сложнее, чем сухарики. У меня есть версия уса в меню (я не показывал тег ul):

  • class}}>{{! print class name (active, open, etc) if it exists }} submenu?}}> {{#icon}}{{/icon}} {{#level-1}} {{/level-1}} {{#level-2}}{{! if level-2 and no icon assigned, use this icon}} {{^icon}}{{/icon}} {{/level-2}} {{title}} {{#badge}} tooltip}}>{{{badge}}} {{/badge}} {{#label}} label-title}}>{{{label}}} {{/label}} {{#level-1}} {{/level-1}} {{#submenu?}}{{/submenu?}} {{#submenu?}}{{! if we have submenu items, print them recursively }} {{/submenu?}}
  • Таким образом, для каждого узла это логика для применения. Мне нужно знать, имеет ли узел подузлы (подменю), если это узел уровня 1 или уровня 2.
    1) Как я могу это знать?
    2) Если мне нужно изменить SiteMapNodeModel.cshtml, который, я думаю, мне нужно изменить, как не путать с сухарями, так как они используют один и тот же шаблон?

    Создайте шаблон для MenuHelperModel и MenuHelperModel ему собственное имя и поместите его в папку /Views/Shared/DisplayTemplates/ . Затем вы можете создать шаблон для SiteMapNodeModel и SiteMapNodeModelList и предоставить им собственные имена. Скопируйте содержимое MenuHelperModel.cshtml , SiteMapNodeModel.cshtml и SiteMapNodeModelList.cshtml в свои новые настраиваемые помощники.

    Затем измените переопределения в каждом из HTML-помощников в шаблонах, чтобы они вызывали пользовательские шаблоны вместо встроенных шаблонов.

     // MyMenu.cshtml @* // This template is for the root level *@ @model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel @using System.Web.Mvc.Html @using MvcSiteMapProvider.Web.Html.Models  // MyMenuNodeList.cshtml @* // This template is for the descendent lists below the root level *@ @model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModelList @using System.Web.Mvc.Html @using MvcSiteMapProvider.Web.Html.Models 
      @foreach (var node in Model) {
    • @Html.DisplayFor(m => node, "MyMenuNode") @* <-- // Custom Node Helper Name *@ @if (node.Children.Any()) { @Html.DisplayFor(m => node.Children, "MyMenuNodeList") @* <-- // Custom Node Helper Name *@ }
    • }
    // MyMenuNode.cshtml @* // This template is for the node *@ @model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel @using System.Web.Mvc.Html @using MvcSiteMapProvider.Web.Html.Models Testing @* <-- // If configured right, Testing will appear before every node *@ @if (Model.IsCurrentNode && Model.SourceMetadata["HtmlHelper"].ToString() != "MvcSiteMapProvider.Web.Html.MenuHelper") { @Model.Title } else if (Model.IsClickable) { if (string.IsNullOrEmpty(Model.Description)) { @Model.Title } else { @Model.Title } } else { @Model.Title }

    Затем вызовите ваш корневой шаблон из меню.

     @Html.MvcSiteMap().Menu("MyMenu") 

    Вы можете использовать это как отправную точку, а затем внести изменения в представления для вывода желаемого HTML.

    Обратите внимание, что шаблон SiteMapNodeListHelperMySiteMapNodeList » в этом случае) рекурсивно вызывает себя для каждого последующего уровня узлов.

    Interesting Posts

    Написание нового плагина рефакторинга для Eclipse?

    Правильный способ сохранить объединенные соединения в живых (или время их выхода и получить свежие) в течение более длительного времени бездействия для MySQL, приложение Grails 2

    Запустить Firefox и подождать, пока он не будет закрыт

    Получение пиксельных данных с изображения с помощью java

    Как определить мой фактический внешний IP-адрес через командную строку Windows во время VPN

    В чем разница между istringstream, ostringstream и stringstream? / Почему бы не использовать stringstream в каждом случае?

    Прикрепите к уже запущенной JVM

    Приложение .NET не может запускать и получать XamlParseException

    Как я могу сделать свое собственное событие на C #?

    Когда Fragment заменяется и помещается в задний стек (или удаляется), он остается в памяти?

    Какие проблемы следует учитывать при переопределении равных и hashCode в Java?

    Подключение через VPN – могут ли они видеть мои сайты в приватном режиме просмотра?

    Может ли современное оборудование x86 не хранить один байт в памяти?

    Использование ~ (тильда) в R-программировании Язык

    Почему я не могу использовать оператор «ожидание» в теле оператора блокировки?

    Давайте будем гением компьютера.