MVC4 용 MvcSiteMapProvider (v4.6.1)를 사용하여 빵 부스러기 및 메뉴를 처리합니다. 나는 @Html.MvcSiteMap().Menu()
을 설치하고, 설정하고, 사용하는 100 단계의 튜토리얼을 보았다.MvcSiteMapProvider를 사용하여 노드 수준의 일부를 표시합니다.
이제 최상위 수준의 일부를 보여주는 메뉴가 필요합니다. 현재 최상위 노드에는 홈, 프로필, 로그인, 1 번, 2 번, 3 번이 포함됩니다. this SOf answer에 그려진 항목을 모두 가로 행으로 표시하는 메뉴를 만들었습니다. 또한 시스템에 권한이 포함되면 일단 3 번을 액세스 할 수없는 사용자는 해당 메뉴에서 해당 권한을 볼 수 없습니다.
내가 원하는 것은 홈 및 로그인이 빵 부스러기에 표시되어야하지만 메뉴에 있어서는 안됩니다. 현재 사이트 맵에서는 연속적이지 않습니다.
어떤 권장 사항이 있습니까?
내 현재보기, 링크 된 답변에서 촬영 도매 :
는@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using MvcSiteMapProvider.Web.Html.Models
<div class="nav navbar-nav navbar-left">
<ul class="nav navbar-nav">
@foreach (var node in Model.Nodes) {
<li>@Html.DisplayFor(m => node)</li>
}
</ul>
</div>
이보기에 내 메뉴보기에서 내 현재 통화 :
@Html.MvcSiteMap().Menu("MenuHelper", 0, true, false, 1)
나는 물론, 새로운 메뉴를 만들 수 있습니다 내가 보여주고 싶지 않은 것을 걸러내는 도우미.
편집 : Mvc.sitemap는 :
<mvcSiteMapNode title="Home" controller="Home" action="Index" visibility="MainMenu,!*">
<mvcSiteMapNode title="About" controller="Home" action="About"/>
<mvcSiteMapNode title="Profile" controller="Home" action="UpdateProfile" visibility="MainMenu,!*"/>
<mvcSiteMapNode title="Login" controller="SGAccount" action="Login">
<mvcSiteMapNode title="Register" controller="SGAccount" action="Register">
</mvcSiteMapNode>
</mvcSiteMapNode>
<mvcSiteMapNode title="Thing1" controller="Thing1" action="Index" visibility="MainMenu,!*">
<mvcSiteMapNode title="Thing1-action1" controller="Thing1" action="action1" visibility="RoleMenu,!*"/>
<mvcSiteMapNode title="Thing1-action2" controller="Thing1" action="action2" visibility="RoleMenu,!*"/>
</mvcSiteMapNode>
<mvcSiteMapNode title="Thing2" controller="Thing2" action="Index" visibility="MainMenu,!*">
</mvcSiteMapNode>
</mvcSiteMapNode>
MAINMENU 집, 프로필, 정보, 로그인, Thing1 및 Thing2을 보여줍니다. 그것 모두를 보여서는 안됩니다.
편집 2 : 외부 DI에 대한 구조지도를 사용하여, 나는이 라인을 추가,하지만 난 그게 맞습니다 것을 확실하지 않다 :
x.For<ISiteMapNodeVisibilityProviderStrategy>().Use<SiteMapNodeVisibilityProviderStrategy>();
편집 3 : 내 빵 부스러기, @Html.MvcSiteMap().SiteMapPath()
는 작동이 중지. 이것 역시 수정이 필요합니다.
편집 4 : 내부 DI 설정을 web.config
에서 제거하여 이전 두 편집 문제를 수정했습니다. 이제 나는 내가 보여주고 싶은 것을 보여 주기만합니다.
도움이됩니다. 내 규칙은 충분히 간단합니다 - 메뉴 X는 모든 사람에게 표시되어야하며 메뉴 Y는 역할에 따라 표시되어야합니다. 그리고 MvcSiteMapProvider가 "역할 기반"을 잘 처리한다는 것을 이미 배웠습니다. –
이것은 의도 한대로 작동하지 않았습니다. 내 사이트 맵 파일을 게시하겠습니다. –
외부 DI 예제를 포함하도록 답변을 수정하고 수정했습니다. VisibilityAffectsDescendants를 false로 설정했는지 확인하십시오 (이전 예제에서는 true로 표시됨). 그렇지 않으면 메뉴에 보이지 않는 노드의 하위 노드가 숨겨집니다. 또한 탐색 경로의 항목을 항상 표시하려면 업데이트 된 항목 3을 참조하십시오. – NightOwl888