В моем проекте MVC3 я установил MvcSiteMapProvider v.3.2.1 от Maartenba и создал очень простое статическое двухуровневое меню. Ниже представлена структура концептуальной карты.
- Home
- Member Center
- Member Listing [SELECTED]
- Event Calendar
- Documents
- Administration
Теперь в списке участников есть много подстраниц (например, «Подробности», «Редактировать» и т. д.), но я не хочу отображать их как пункты меню 3-го уровня (главным образом потому, что они привязаны к определенному ID пользователя). Однако я хочу, чтобы все эти страницы третьего уровня были «привязаны» к узлу меню «Список участников», чтобы он отображался как выбранный на этих страницах.
У меня есть следующий код в моем файле Mvc.SiteMap:
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Member Center" area="Members" controller="Home" action="Index" roles="Approved Member" >
<mvcSiteMapNode title="Member Listing" area="Members" controller="Member" action="List" />
<mvcSiteMapNode title="Event Calendar" area="Members" controller="Event" action="List" />
<mvcSiteMapNode title="Documents" area="Members" controller="Document" action="List" />
</mvcSiteMapNode>
<mvcSiteMapNode title="Administration" area="Admin" controller="Home" action="Index" roles="Site Administrator" >
</mvcSiteMapNode>
</mvcSiteMapNode>
Чтобы отобразить меню, я использую следующий код в файле _Layout.cshtml:
@Html.MvcSiteMap().Menu(1, true, true, 1, true, true)
Наконец, я изменил файл SiteMapNodeModel.cshtml, чтобы он добавлял класс «selectedMenuItem» к узлу, который соответствует странице, которую просматривает пользователь. Вот фрагмент, отображающий узел меню.
@model SiteMapNodeModel
<a href="@Model.Url" class="@(Model.IsCurrentNode ? "selectedMenuItem" : "")">@Model.Title</a>
Отображение и навигация по карте работают нормально, пока я не перейду дальше в зону для участников. Например, если я пройду мимо Members/Member/List
(что отображает меню правильно) и перейду на страницу, подобную Members/Member/Detail/1
, дочерние узлы в Центре участников ("Список участников", "Календарь событий" и т. д.) исчезнут . Поэтому вот две мои проблемы с моим текущим кодом:
Я хочу указать, что любая данная страница является частью узла родительского меню «Центр участников», чтобы отображались узлы дочернего меню «Центра участников», независимо от того, определена ли данная страница как конкретный узел в меню. структура.
Я хочу указать (возможно, в представлении или действии контроллера), что конкретная страница должна быть привязана к определенному узлу меню. Например, когда пользователь находится в
Members/Member/Detail/1
, я просто хочу, чтобы дочерний узел «Список участников» был указан какIsCurrentNode
, чтобы файл SiteMapNodeModel.cshtml правильно украсил его классом «selectedMenuItem».
Какие-либо предложения?