3

탐색 및 탐색 경로에 대한 일부 게시물을 보았지만 동일한 문제를 발견하지 못했습니다. 그러나 있다면, 용서해주세요. 고맙습니다.MVC3 탐색 및 탐색 경로 - 데이터 기반

내 경우 :

Interests     Profiles 
|      | 
|_Interest Area 1    |-Profile Area 1 
| |      | 
| |_Interest Area 1.1    |_List of Books 
|  |      | 
|  |_List of Books     |_Book Detail 
|   | 
|   |_Book Detail 
|_Interest Area 2 
    | 
    |_List of Books 
     | 
     |_Book Detail 

계층 구조는 데이터베이스에 저장됩니다. 진입 점 관심 분야 및 프로필이 고정됩니다. 거기에서 나는 아이들이 무엇을 할 것인지 모른다.

더 이상 자식이 없으면 마지막으로 선택한 (하위) 범주의 값을 기준으로 책이 검색됩니다.

여기에는 두 가지 문제가 있습니다. 첫 번째 : 적절한 경로 만들기. 내가 좋아하는 방식은 다음과 같습니다.

/books/{id}/{interestareaname}/{subinterestareaname}/{books}/{page} 

여기에서 interestareaname은 사용자에게 친숙한 URL로 추가되며 계층 구조를 계속 사용하는 동안 반복됩니다. 출력은 다음과 같습니다 /책/1/프로젝트 관리/PRINCE2/책/1 이 페이지 된 listpage 페이지 1

에 PRINCE2 책을 보여줍니다하지만 한 단계 만있을 때이 경로는 하나의 포함 따라서 interestareaname과이된다 :

routes.MapRoute(
     "Details", 
     "view/details/{id}/{booktitle}", 
     new { controller = "book", action = "Details", id = "*", booktitle= "*"}); 

    routes.MapRoute(
     "interests", 
     "books/{id}/{level1}/{level2}/{level3}/{page}", 
     new { controller = "book", action = "books", level1 = "*", level2 = "*", level3 = "*", id = "0", page = UrlParameter.Optional } 
    ); 
    routes.MapRoute(
     "profiles", 
     "books/{id}/{level1}/{level2}/{level3}/{page}", 
     new { controller = "book", action = "books", level1 = "*", level2 = "*", level3 = "*", id = "0", page = UrlParameter.Optional } 
    ); 

내가 최대 레벨을 설정해야한다는하여이에 도착 : 나는 문제 번호 하나를 해결하기 위해 무슨 짓을

/book/{id}/{interestareaname}/{books}/{page} 

. 그것은 내가 더 동적 인 방법을 알지 못했기 때문입니다.

이제 문제는 관심 분야 카테고리와 프로필 카테고리를 구별하는 것입니다. 나는 같은 경로를 만들지 만 다른 이름을 사용하고 사이트 맵 생성시 경로 이름을 추가했습니다.

내가 가진 두 번째 문제는 사이트 맵과 이동 경로입니다. MVCsitemapprovider 및 DynamicNodes 기능을 사용합니다.

사이트 맵으로 세부 정보 페이지를 표시하는 데 문제가 있습니다. 이 책은 프로필과 관심사에 모두 표시됩니다. 일부 도서는 여러 관심 분야 또는 프로필에 표시됩니다. 각각의 경우에 나는 그 책에 도착하기까지의 경로를보고 싶습니다.

먼저 각 책에 대한 세부 정보 페이지를 사이트 맵에 추가했지만 그 내용은 미쳤습니다. 그리고 사이트 맵에 의해 잘 처리되지 않는 중복 된 항목을 만듭니다. 다른 옵션은 목록 페이지의 routedata를 쿼리 문에 의해 세부 정보 페이지로 전달하는 것이 었습니다.하지만 그것은 끔찍한 것처럼 보였습니다. 그런 다음 ID를 가지고 있기 때문에 탐색 경로를 모방하는 쿼리 문자열을 구문 분석하는 논리를 추가해야했습니다. 다음 최저 수준.

나는 지금 많은 밤을 보냈다. 그리고 나는 아직도 그것을 이해할 수 없다. 어떤 사람이 나를 도와 주거나 올바른 방향으로 향하게 할 수 있다면 매우 감사드립니다.

+0

라우트가 하나의 단일 라우트로 축소되었습니다. 다른 라우트에는 결코 도달하지 않았으므로 (라우트 버그를 사용하여 찾음). 목록의 페이징 문제는 UrlParameter.Optional을 사용하여 해결할 수 있습니다. 이제 남은 유일한 문제는 책의 세부 정보 페이지로 갈 때 이동 경로를 보여주는 것입니다. – Mounhim

답변

0

지금까지 자신이 실제로처럼, 가능한 모든 경로를 생성하는 것입니다 찾을 유일한 해결책 :

 routes.MapRoute(
      "interest", 
      "interest", 
      new { controller = "books", action = "viainterest"}, 
      new { controller = "books", action = "viainterest" } 
     ); 

     routes.MapRoute(
      "interest_1_details", 
      "interest/{level1}/view/{id}/{booktitle}", 
      new { controller = "books", action = "detailsviainterest_1, level1 = "*", id = 0, booktitle = "*" }, 
      new { controller = "books", action = "detailsviainterest_1" } 
     ); 

     routes.MapRoute(
         "interest2details", 
         "interest/{level1}/{level2}/view/{id}/{booktitle}", 
         new { controller = "books", action = "detailsviainterest_2", level1 = "*", level2 = "*", id = 0, booktitle = "*" }, 
         new { controller = "books", action = "detailsviainterest_2" } 
        ); 


     routes.MapRoute(
         "interestlevel_1", 
         "interest/{id}/{level1}", 
         new { controller = "books", action = "viainterestlevel_1, level1 = "*", id = 0 }, 
         new { controller = "books", action = "viainterestlevel_1"} 
        ); 

     routes.MapRoute(
         "interestlevel_2", 
         "interest/{id}/{level1}/{level2}", 
         new { controller = "books", action = "viainterestlevel_2", level1 = "*", level2 = "*", id = 0 }, 
         new { controller = "books", action = "viainterestlevel_2} 
        ); 
     //and so on for level 3 and for profiles etc. 

나는 모든 카테고리 계층도 모든 항목을 추가 추가 DynamicNodeManager합니다.이제 세부 정보 페이지로가는 빵가루 빵 점을 알게되었습니다. 각 세부 정보 페이지의 경로 (라우팅 및 액션)가 다르기 때문에 여러 카테고리에 표시되는 책조차도 정확한 이동 경로를 표시합니다.

내 문제가 해결되었지만 더 나은 방법이 있어야한다고 생각합니다. 현재 솔루션의 문제점은 nodecollection에 추가 된 세부 항목으로 인해 트리가 커질 수 있다는 것입니다. 다른 단점은 응용 프로그램 시작시 트리가 생성된다는 것입니다. 따라서 웹 응용 프로그램을 재설정하기 전까지는 새 책을 추가하고 노드를 만들지 않습니다.

다른 제안 사항이 있으면 그 내용을 확인해 드리겠습니다. 지금은 내용을 계속할 수 있습니다. 내용은 모두 끝입니다.