2011-02-12 3 views
5

ASP.Net MVC 3을 사용하여 CMS 시스템의 간단한 프로토 타입을 작성하려고합니다.이 ASP.NET 라우팅이 제대로 작동하려면 어떻게합니까?

시스템에는 show 및 create의 두 가지 작업이있는 단일 컨트롤러가 있습니다.

'표시'작업의 형식은 최대 5 개의 선택 가능한 부분을 취하는 형식입니다. domain.com/part1/part2/part3/part4/part5

'표시'작업의 형식은 유사하지만 앞에 '생성'부분이 있어야합니다. domain.com/create/part1/part2/part3/part4/part5

나는이 내를 Global.asax에서 다음 설정 :

내 '쇼'방법은 페이지가 일치 찾을 실패하면
routes.MapRoute(
     "CreatePageRoute", 
     "create/{part1}/{part2}/{part3}/{part4}/{part5}", 
     new 
      { 
       controller = "Page", 
       action = "Create", 
       part1 = UrlParameter.Optional, 
       part2 = UrlParameter.Optional, 
       part3 = UrlParameter.Optional, 
       part4 = UrlParameter.Optional, 
       part5 = UrlParameter.Optional 
      }); 

    routes.MapRoute(
     "Default", 
     "{part1}/{part2}/{part3}/{part4}/{part5}", 
     new 
      { 
       controller = "Page", 
       action = "Show", 
       part1 = UrlParameter.Optional, 
       part2 = UrlParameter.Optional, 
       part3 = UrlParameter.Optional, 
       part4 = UrlParameter.Optional, 
       part5 = UrlParameter.Optional 
      } 
     ); 

제공된 경로가있는 새 페이지를 만드는 옵션이 포함 된 '찾을 수 없음'페이지를 반환합니다. 이 링크는 다음 사용하여 정의됩니다 :

@Html.ActionLink("Yes", "Create") 

은 [(가) "예"라는 질문에 대한 답을 나타냅니다를? "이 경로에 대한 페이지를 만들고 싶어"]

그래서 '기본을 테스트 할 때 쇼 '행동 다음 경로의 모든 성공적이라고'경로 내는 것을 볼 ' {빈} A/B A/B/C A/B/C/D A/B/c/d/e

위대한입니다.

그러나 "@ Html.ActionLink ("Yes ","Create ") 문에 의해 생성 된 결과 'create'링크는 일관성없는 결과를 제공합니다. 그것은 입력의 길이에 따라 다른 하이퍼 링크를 생성하는 것 같습니다. 결과는 다음과 같다 : 경로에 대한

"{빈}"링크 "{포트} 로컬 호스트 /"제공 -을 위해 내가 기대했다 : "를 경로에 대한

"{포트} 로컬 호스트/생성 "/a ", 링크는"localhost {: port}/"를 제공합니다."localhost {: port}/create/a "를 원합니다.

경로"/ a/b " : port}/a "-"localhost {: port}/create/a/b "를 희망했습니다.

"/ a/b/c "경로의 경우"localhost {: port}/a/b "-"localhost {: port}/create/a/b/c "를 원했습니다.

"/ a/b/c/d"경로의 경우 "localhost {: port}/create/a/b/c/d"를 제공합니다.

경로 "https://stackoverflow.com/a/b/c/d/e "링크는"localhost {: port}/create/a/b/c/d/e "를 제공합니다. "/ a/b/c/d"또는 "/ a/b/c/d/e"를 제공 할 때 작동합니까?

은 내가 바보 인거야 알고, 내가 여러 선택적 매개 변수가되는 불일치의 원인이 있다고 생각 나

샌디

+0

얼마 뒤 나는 비슷한 문제가 있었다 :에 대해 어떻게
. 'UrlParameter.Optional'을'' "로 변경해보십시오." – Omar

답변

1

도와주세요.

routes.MapRoute("Create5", "create/{part1}/{part2}/{part3}/{part4}/{part5}", new { controller = "Page", action = "Create", part5 = UrlParameter.Optional }); 
    routes.MapRoute("Create3", "create/{part1}/{part2}/{part3}", new { controller = "Page", action = "Create", part3 = UrlParameter.Optional }); 
    routes.MapRoute("Create1", "create/{part1}", new { controller = "Page", action = "Create", part1 = UrlParameter.Optional }); 

    routes.MapRoute("Default5", "{part1}/{part2}/{part3}/{part4}/{part5}", new { controller = "Page", action = "Show", part5 = UrlParameter.Optional }); 
    routes.MapRoute("Default3", "{part1}/{part2}/{part3}", new { controller = "Page", action = "Show", part3 = UrlParameter.Optional }); 
    routes.MapRoute("Default1", "{part1}", new { controller = "Page", action = "Show", part1 = UrlParameter.Optional }); 
+0

많은 감사합니다. 이것은 트릭을 멋지게합니다. 또한 솔루션이 선택적 매개 변수를 현명하게 사용하여 필요한 경로 수를 줄이는 방식은 밝았습니다. 도와 주셔서 감사합니다. – sandy

관련 문제