2011-09-08 5 views
4

최근 marteenba의 sitemap provider을 사용하기 시작했습니다. 다른 사이트 맵과 관련된 경로 문제를 해결할 수 없었기 때문입니다. 그것은 이전의 것보다 낫다. 내 질문은 : 어떻게 하나의 메인 페이지로 이동하는 페이지에서 다른 이동 경로를 만들 수 있습니까? 생각 아래 고려 :mvc 3 사이트 맵 공급자 - 동일한 노드를 가리키는 다중 경로

사이트 맵 구조 위의 예에서

<mvcSiteMapNode title="Home" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal"> 
     <mvcSiteMapNode title="Clients Search" controller="ClientBussiness" action="ClientSearch" description="Clients Search"> 
      <mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/> 
     </mvcSiteMapNode> 

     <mvcSiteMapNode title="Advanced Search" controller="ClientBussiness" action="AdvancedSearch" description="Clients Advanced Search"> 
      <mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/> 
     </mvcSiteMapNode> 

     <mvcSiteMapNode title="Another Search" controller="ClientBussiness" action="AnotherSearch" description="Clients Another Search"> 
      <mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/> 
     </mvcSiteMapNode> 
</mvcSiteMapNode> 

, 내 이동 경로는 항상 노드 클라이언트 대신 다른의 검색을 보여줍니다. 각 종류의 검색에 대해 다른 경로를 만들어야하는지 여부는 알지 못합니다 (마지막 사이트 맵에서이 작업을 수행했지만, 불행히도 iis6에서는이 작업이 마음에 들지 않았습니다).

감사합니다.

EDIT

포럼에서 검색 나는 비슷한 질문을 발견했다. 그럼, 아래의 구조를 고려하십시오 :

Home >> Search >> Contracts 
Home >> Another Search >> Contracts 
Home >> Advanced Search >> Contracts 
Home >> Web Service Search >> Extra fields >> Contracts 

답변

5

글쎄 그것은 내가해야 할 일은 내 컨트롤러에 동적 노드 속성을 추가하는 것입니다. 당신은 그것을하는 방법을 읽을 수 here. 여기에, 위의 예를 사용하면 당신이 일을 끝낼 방법은 다음과 같습니다

위의 예에서
[MvcSiteMapNodeAttribute(Title = "Search", Key = "search", ParentKey = "ContractSearch", Route = "SearchRoute")] 
     [MvcSiteMapNodeAttribute(Title = "AdvancedSearch", Key = "ContractAdvSearch", ParentKey = "AdvSearch", Route = "AdvSearchRoute")] 
     [MvcSiteMapNodeAttribute(Title = "AnotherSearch", Key = "ContractAnotherSearch", ParentKey = "AnotherSearch", Route = "AnotherSearchRoute")] 
     public ActionResult ContractIndex() 
{ 
    //Things to do...   
} 

는 검색의 각 종류는 제대로 이동 경로에 정의됩니다. 사용할 "검색"의 종류에 따라 다른 경로를 정의해야한다는 점에 유의하십시오. 따라서 3 개의 노드가 동일한 URL을 가리 키도록하려면 각 노드에 자체 경로가 있어야하며 키는 MvcSiteMapNodeAttribute에 정의되어 있어야합니다.

+0

나는 당신이 한 일을 시도했지만 이전 경로 매개 변수를 유지하기 위해 [SiteMapPreserveRouteDataForParent] 사용자 지정 특성을 사용하고 있습니다. 그리고 어떤 이유로 경로 = "무엇이든지"를 사용할 때 "A 경로"를 얻습니다. '경로 컬렉션에서 찾을 수 없습니다.' 왜 그런 일이 일어날 지 아이디어가 있습니까? – Ryan

+1

우선, global.asax에 실제로 정의 된 경로가 있는지 확인해야합니다. 경로를 찾을 수 없다면 경로 경로가 잘못되었다는 것을 의미 할 수 있습니다. 정확한 경로 이름을 사용하지만 경로가 정의되지 않은 'SiteMapNodeAttribute'를 정의했을 수 있습니다. 둘째,'Mvc.sitemap' 파일을 검사하여 경로 충돌이 있는지 확인하십시오. – AdrianoRR

+0

"Route"매개 변수는 이전 경로 또는 현재 경로를 지정하는 것입니다. – Ryan

관련 문제