2017-05-10 7 views
4

웹 응용 프로그램에서 MVCSitemap 공급자를 사용해야하지만 동적 URL이있는 곳에서는 작동하지 않습니다.MVC Sitemap이있는 이동 경로가 하나의 수준 만 표시합니다.

부모님과 자녀가있을 수있는 카테고리 목록이 있습니다. 나는 카테고리를 클릭하면 예를 들어 는, 이동 경로는 다음과 같습니다

Home > Filter 

을 나는 필터의 어린이를 클릭하면, 내가 가지고 :

Filter > Air filter 

홈 링크가 사라집니다. 나는 "에어 필터"의 어린이를 클릭하면 내가 가지고 : 등등

Air filter > air filter children 

하고 있습니다. 항상 마지막 두 레벨이 표시됩니다. 첫 번째 레벨을 클릭하면 항상 홈 페이지로 돌아갑니다.

이 내 MvcSitemap에 :이 제품 컨트롤러에서 하위 카테고리 방법입니다

<mvcSiteMapNode title="Home" controller="Home" action="Index"> 
<mvcSiteMapNode title="Product" controller="Product" action="SubCategories" preservedRouteParameters="selected,category,id,engineId"> 
    <mvcSiteMapNode title="Details" controller="Product" action="ProductDetails" preservedRouteParameters="supplierName,code,name,prodId,-1"/> 
    </mvcSiteMapNode> 

    </mvcSiteMapNode> 

:

[MvcSiteMapNode(Title = "Article", ParentKey = "SubCategories")] 
[Route("{selected}-{category}-{id}-{engineId}")] 
public ActionResult SubCategories(string selected, string category, int id, string engineId) 
    { 
     ........................... 
     SiteMaps.Current.CurrentNode.Title = categoryName; 
     if(categoryRepository.GetCategoryByID(id).ParentId.HasValue) 
     { 
      int parentId = categoryRepository.GetCategoryByID(id).ParentId.Value; 
      string parentName = categoryRepository.GetCategoryByID(parentId).Name; 
      SiteMaps.Current.CurrentNode.ParentNode.RouteValues["id"] = id; 
      SiteMaps.Current.CurrentNode.ParentNode.Title = parentName; 
     } 

당신이 좀 도와 주시겠습니까, 내가 잘못 여기서 뭐하는거야? 웹에서 모든 설명을 확인한 결과 여러 가지 방법으로 시도했지만 어느 누구도이 문제를 해결하지 못했습니다.

답변

0

여기가 저의 견본입니다. 그것을 참조 할 수 있습니다. 팁을위한

<mvcSiteMapNode title="Home" controller="Home" action="Index"> 
     <mvcSiteMapNode title="About" controller="Home" action="About" /> 
     <mvcSiteMapNode title="Contact" controller="Home" action="Contact" /> 
     <mvcSiteMapNode title="Administration" clickable="false"> 
      <mvcSiteMapNode title="User Mgmt" controller="Administration" action="UserMgmt" clickable="false" > 
      <mvcSiteMapNode title="List Role" controller="Administration" action="ListRole" > 
       <mvcSiteMapNode title="Details" controller="Administration" action="Details"> 
       <mvcSiteMapNode title="XXX" controller="Administration" action="XXX" /> 
       </mvcSiteMapNode> 
      </mvcSiteMapNode> 
      </mvcSiteMapNode> 
      <mvcSiteMapNode title="Role Mgmt" controller="Home" action="RoleMgmt" />  
     </mvcSiteMapNode>  
     </mvcSiteMapNode> 

//And then, I create a BootstrapMenuHelperModel view that load this sitemap. //I putted it at DisplayTemplates. 

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel 
@using MvcSiteMapProvider.Web.Html.Models 

@helper TopMenu(List<SiteMapNodeModel> nodeList) 
{ 
    <nav class="navbar navbar-default" role="navigation"> 
     <div class="container-fluid"> 
      <div class="collapse navbar-collapse"> 
       <ul class="nav navbar-nav"> 
        @foreach (SiteMapNodeModel node in nodeList) 
        { 
         string url = node.IsClickable ? node.Url : "#"; 

         if (!node.Children.Any()) 
         { 
          <li><a href="@url">@node.Title</a></li> 
         } 
         else 
         { 
          <li class="dropdown"> 
           <a class="dropdown-toggle" data-toggle="dropdown">@node.Title <span class="caret"></span></a> 
           @DropDownMenu(node.Children) 
          </li> 
         } 

         if (node != nodeList.Last()) 
         { 
          <li class="divider-vertical"></li> 
         } 
        } 
       </ul> 
      </div> 
     </div> 
    </nav> 
} 

@helper DropDownMenu(SiteMapNodeModelList nodeList) 
{ 
    <ul class="dropdown-menu" role="menu"> 
     @foreach (SiteMapNodeModel node in nodeList) 
     { 
      if (node.Title == "Separator") 
      { 
       <li class="divider"></li> 
       continue; 
      } 

      string url = node.IsClickable ? node.Url : "#"; 

      if (!node.Children.Any()) 
      { 
       <li><a href="@url">@node.Title</a></li> 
      } 
      else 
      { 
       <li class="dropdown-submenu"><a href="@url">@node.Title</a>@DropDownMenu(node.Children)</li> 
      } 
     } 
    </ul> 
} 

@TopMenu(Model.Nodes) 

//Finally, call this view from layout 
<div class="row"> 
      <div class="span12"> 
       <nav> 
        @Html.MvcSiteMap().Menu("BootstrapMenuHelperModel") 
       </nav> 
      </div> 
     </div> 
+0

감사 :

첫 번째

, 나는 사이트 맵을 가지고있다. 이것은 내가 원하는 것을 정확하게는 아니지만, 나는 그것을 나의 예에서 사용하려고 노력할 것이다. – Orsi