2013-11-15 3 views
0

MvcSiteMapProvider에서 새로운 기능입니다. 불행히도 혼자서 대답을 찾을 수 없습니다. 나는 MVC4 및 MvcSiteMapProvider 내 질문 사용DynamicNodeProvider가 올바른 URL을 생성하지 않습니다.

1) 링크 주문 (및 Buy-> 검색) 로컬 호스트 나 링크를하지만 로컬 호스트되어야한다/매수/검색

2) 링크 장난감/장난감 세부/1은 "구매"메뉴에 속하지 않습니다 (이 링크 메뉴에 도달하면 구매 -> 검색이 사라집니다). 미리 감사드립니다.

내 Mvc.sitemap :

<mvcSiteMapNode title="Home" 
    controller="Toy" 
    action="Index" 
    key="Home"> 
<mvcSiteMapNode title="Buy" 
    controller="Toy" 
    action="Search" 
    key="ToyBuy"> 
<mvcSiteMapNode title="Search" 
    controller="Toy" 
    action="Search" 
    key="ToySearch"> 
<mvcSiteMapNode title="Toy Search Result" 
    controller="Toy" action="Search-Result" 
    key="ToySearchResult"> 
    <mvcSiteMapNode title="Toy Details" 
     controller="Toy" 
     action="Toy-Details" 
     key="ToyDetail" dynamicNodeProvider="MyToys.Web.DynamicNodeProviders.ToySearchDynamicNodeProvider,MyToys.Web"/> 
    </mvcSiteMapNode> 
</mvcSiteMapNode> 
<mvcSiteMapNode title="Publish" controller="Toy" action="Publish" description=""/> 
<mvcSiteMapNode title="Published" controller="Toy" action="Published" key="ToyPublished" description=""> 
<mvcSiteMapNode title="Edit" controller="Toy" action="Edit" 
     preservedRouteParameters="id" key="ToyPublishedEdit" visibility="false" description=""/> 
</mvcSiteMapNode> 

및 ToySearchDynamicNodeProvider :

public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node) 
{ 
    var rep = new ToyRepository(); 
    foreach (var Toy in rep.Get()) 
    { 
    DynamicNode dynamicNode = new DynamicNode(); 
    dynamicNode.ParentKey = "ToySearchResult"; 
    dynamicNode.RouteValues.Add("id", Toy.ID); 
    yield return dynamicNode; 
    } 
} 

그런데, 나는 또한 MenuHelperModel.cshtml를 다시 작성 :

<div class="hmenu"> 
    <ul class="tabs"> 
    @foreach (var node in Model.Nodes) 
    { 
     <li>@Html.DisplayFor(m => node)</li> 
    } 
    </ul> 
</div> 
@foreach (var node in Model.Nodes) 
{ 
    if (node.IsInCurrentPath) 
    { 
     if (node.Children.Any()) 
     { 
     <div class="vmenu"> 
      <ul class="tabs"> 
       @foreach (var child in node.Children) 
       { 
       <li><a href="@child.Url">@child.Description</a></li> 
       } 
      </ul> 
     </div> 
     } 
    } 
} 

답변

2

구매 (및 구매 -> 검색)

MvcSiteMapProvider는 MVC 프레임 워크의 나머지 부분과 동일한 MVC UrlHelper 클래스를 사용하여 URL을 생성합니다. URL 작성 방법은 라우트 구성에 따라 다릅니다. 이미 MVC 경로를 구성하는 데 도움이되는 몇 가지 리소스가 있습니다. 다음은 몇 가지 예입니다. 당신은 당신이 생성 무엇을하려고하는 URL 방식을 언급하지 않았기 때문에

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/asp-net-mvc-routing-overview-cs http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx http://msdn.microsoft.com/en-us/library/cc668201.ASPX

나는 더 이상 특정보다 수 없습니다.

링크 장난감/장난감 - 세부/1 메뉴를

그것이 동적 노드 공급자가있는 모든 노드를 지정하지 않기 때문에 노드는 "구매"아래에 나열되지 않은 이유를 "구매"에 속하지 않는 "ToyBuy"의 부모 키

일반적으로 주 노드 아래에 동적 노드를 지정해야합니다. 검색 기능을 사용하면 단일 노드를 사용할 수 있습니다. preservedRouteParameters 속성을 사용하여 각 사용자 지정 라우트 매개 변수 (예 : 검색어)를 지정할 수 있습니다.이 매개 변수는 현재 요청의 값을 노드에 복사하고 매번 노드와 일치하도록합니다. 검색 페이지에서 특정 검색 항목을 탐색 할 때

홈> 검색

그런 다음, 카테고리 (이 경우 ToyBuy) 아래에 나열된 항목 페이지로 이동합니다.

홈> 판매> preservedRouteParameters를 사용하여 다운로드 데모 항목

, How to Make MvcSiteMapProvider Rememeber a User's Position를 참조하십시오.

Toy-Details는 SiteMap에 포함되지 않습니다. DynamicNodeProvider를 선언하는 노드는 템플릿 노드 일 뿐이며 모든 DynamicNode는 기본적으로 해당 속성을 사용합니다.

+0

답변 해 주셔서 감사합니다. 정말 도움이됩니다. 질문의 보내기 부분을 살펴볼 수 있습니까?나는 코드를 보여주기 위해 대답으로 추가했다. – user1820916

관련 문제