2017-01-17 11 views
0

В моем решении есть определенные узлы, которые должны отображаться в меню/навигации, но не отображаются в панировочных сухарях, поскольку они не ссылаются на фактические страницы и поэтому просто представляют ошибку, когда щелкнул. Я пробовал несколько методов, относящихся к расширенной видимости узлов отсюда: https://github.com/maartenba/MvcSiteMapProvider/wiki, но я не могу заставить его работать для меня. Сотрудник предложил, возможно, создать перегрузку метода SiteMapPath в классе SiteMapPathHelper, но я не уверен, насколько это точно или как оно будет отформатировано. Я довольно новичок в MVC и действительно могу использовать некоторую помощь. Благодаря!Как предотвратить появление узла в сухарях MVC


Спасибо @ NightOwl888 за ваш ответ! Я собираюсь добавить еще несколько подробностей, чтобы убедиться, что все правильно. Это пример того, что часть узлов в файле Sitemap выглядит следующим образом:

<mvcSiteMapNode title="Inventory Management" url="~/Resources/Inventory/Default.aspx"> <mvcSiteMapNode title="Group Inventory" action="#" visibility="SiteMapPathHelper,!*" clickable="false"> <mvcSiteMapNode title="Group Inventory Management" url="~/Resources/Inventory/UnitInventory" controller="GroupInventory" action="Index" /> <mvcSiteMapNode title="Manage All Group Inventory" url="~/Resources/Inventory/ManageAllGroupInventory.aspx"> <mvcSiteMapNode title="Manage Inventory Item" url="~/Resources/Inventory/ManageInventoryItem.aspx" /> </mvcSiteMapNode> <mvcSiteMapNode title="Search Inventory" url="~/Resources/Inventory/SearchInventory.aspx?module=resource" /> </mvcSiteMapNode> </mvcSiteMapNode>

«Управление запасами» представляет собой начальную страницу, на которую пользователь переходит, когда отображается меню с заголовком «Группа инвентаризации »(второй узел), а пункты меню - это элементы ниже (« Управление инвентаризацией групп »,« Управление всей инвентаризацией групп »и« Поисковая инвентаризация »). Каждый из пунктов меню - это ссылки на другие страницы, но заголовок меню не является ссылкой и не доступен для кликов. Когда я перехожу к одному из пунктов меню, заголовок меню («Групповой инвентарь») появляется на дисплее панировочных сухарей, даже если он не ссылается ни на что. Поэтому в основном, если я нажимаю на первый пункт меню, он отображает «Главная страница> Управление запасами> Групповой инвентарь> Управление инвентаризацией групп», и если пользователь нажимает «Групповой инвентарь», это приводит к ошибке. Мне нужно предотвратить отображение «Групповой инвентаризации» только в тропе панировочных сухарей. Я немного борюсь, чтобы понять это из вашего первоначального ответа.

P.S. Некоторые из атрибутов в узле Group Inventory - это те, которые я добавил, чтобы попытаться скрыть их, на основе примеров, которые я видел до сих пор.

+0

Я обновил свой ответ. – NightOwl888

ответ

0

A SiteMapNode представляет собой реальное местоположение на вашем веб-сайте или на внешнем сайте (за исключением узла без привязки узлов), который является узлом с свойством Clickable, установленным в false, что просто для того, имеют иерархию для узла, который не представляет собой реальное местоположение). SiteMapNodes представляют собой серверные представления узлов - вы можете думать об этом как о иерархической базе данных.

Если у вас есть дополнительные ссылки, которые вы хотели бы добавить в меню на стороне клиента (возможно, для некоторых функций JavaScript), вы можете настроить шаблоны вспомогательного меню в каталоге /Views/Shared/DisplayTemplates/. Если вам нужно, вы можете добавить свои собственные custom attributes к определенным узлам, чтобы сигнализировать о ваших шаблонах, где именно вы можете добавить свои клиентские ссылки.

См. MvcSiteMapProvider hidden mvcSiteMapNode with CRUD operation для получения дополнительной информации о том, как это осуществить.

Похожие:


На вашей без ссылок группировки узла, вы определили для наглядности: visibility="SiteMapPathHelper,!*".

Предполагая, что вы настроили провайдер видимость по умолчанию как FilteredSiteMapNodeVisibilityProvider согласно documentation, вы конкретно говоря это «сделать узел виден на пройденном пути, но не в другом месте» (меню, карта сайта, XML карта сайта и т.д.). Таким образом, он делает именно то, что вы указали. Тем не менее, вы не указали, что вы - , ожидая, что это. Возможно, вы имели в виду !SiteMapPathHelper, что означает «сделать узел видимым повсюду, кроме тропы»?

+0

Благодарим за отзыв. Я добавил дополнительные сведения к оригинальной публикации, поскольку я не мог вместить все это в комментарий. Если у вас есть шанс, не могли бы вы взглянуть? Я знаю, что ты занят, я вижу тебя повсюду, исследуя этот материал. :) –

+0

Ладно, похоже, что у меня была эта часть назад, потому что вы правы, я хочу, чтобы она появлялась повсюду, но тропа для панировки. Я попытался переключить его на SiteMapPathHelper, но это тоже не сработало, поэтому я не должен правильно устанавливать что-то. Я также заметил еще одну аномалию в том, что если я нажму на второй узел в группе «Управление всей инвентаризацией групп», тогда «Групповой инвентарь» не появится _not_ в цепочке сухарей. Не уверен, что будет отличаться между узлами, которые могут вызвать это. –

0

Я смог найти какое-то решение вне сферы ожидаемого. Я добавил атрибут к определенным узлам, которые мне нужно было скрыть с именем isbreadcrumbhidden. Затем я смог поместить чек в SiteMapPathHelperModel.cshtml, представление, которое строит строку breadcrumb, чтобы исключить любые узлы, у которых атрибут isbreadcrumbhidden установлен на «true». Мне нравится решение, потому что мне не нужно вносить какие-либо обширные изменения или дополнения в код, только один атрибут. Ниже приведен код обзора:

@foreach (var node in Model) { 
    if (!node.Attributes.ContainsKey("isbreadcrumbhidden") || (node.Attributes.ContainsKey("isbreadcrumbhidden") && node.Attributes["isbreadcrumbhidden"].ToString() == "false")) 
    { 
     @Html.DisplayFor(m => node); 

      if (node != Model.Last()) { 
       <text> &gt; </text> 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^