Я использую версию 4, для которой указанные провайдеры, очевидно, не работают. предписанный способ иметь несколько карт сайта в v4 , откровенно напугал bejeebus из меня и был намного большим количеством работы, чем я хотел.
Согласно комментарию предложения @ NightOwl888 относительно его собственного ответа, я использовалопция именованных помощников в v4.У меня все еще есть только один файл mvc.sitemap, но у меня есть взаимоисключающие параметры видимости.
Шаг 1: добавьте этот параметр в web.config
<add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value="MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider, MvcSiteMapProvider"/>
Шаг 2: выберите именаваших различных «меню» и примените их к атрибуту visibility
на каждом узле.В моем случае у меня были «Обычный» и «Админ».Опять же, все они находятся в одном файле mvc.sitemap.
<mvcSiteMapNode title="Reports" controller="Report" action="List" visibility="Regular,!*"/>
<mvcSiteMapNode title="Downloads" controller="Download" action="List" visibility="Regular,!*"/>
<mvcSiteMapNode title="Documents" controller="Document" action="List" visibility="Regular,!*"/>
<mvcSiteMapNode title="Users" controller="User" action="List" visibility="Admin,!*"/>
<mvcSiteMapNode title="Projects" controller="Project" action="List" visibility="Admin,!*"/>
<mvcSiteMapNode title="Misc" clickable="false" visibility="Admin,!*">
<mvcSiteMapNode title="Reports" controller="Report" action="List" visibility="Admin,!*"/>
<mvcSiteMapNode title="Downloads" controller="Download" action="List" visibility="Admin,!*"/>
<mvcSiteMapNode title="Documents" controller="Document" action="List" visibility="Admin,!*"/>
</mvcSiteMapNode>
Вы заметите, что ссылки «Отчеты», «Загрузки» и «Документы» доступны как обычным пользователям, так и администраторам, но поскольку администратор редкоиспользует эти параметры, я хотел поместить их в подменю Misc.
Шаг 3: в вашем _Layout.cshtml выберите, какое меню вы хотите отобразить.
@if(User.IsInRole("Admin"))
{
@Html.MvcSiteMap().Menu("BootstrapMenuHelperModel", false, new { name = "Admin" })
}
else
{
@Html.MvcSiteMap().Menu("BootstrapMenuHelperModel", false, new { name = "Regular" })
}
Я использовал это учебник по начальной загрузке / карте сайта , если нет, думаю, вы можете просто позвонить @Html.MvcSiteMap().Menu(new { name = "MENUNAME" })