2012-01-04 3 views
0

누구나 ASP.Net 라우팅 (MVC 3 용)에서 다음을 수행하는 방법을 제안 할 수 있습니까? ,MVC 용 ASP.Net 경로 값 조합

/{id}-{controller}/{action}/{further-values} 

하지만 나뿐만 아니라 컨트롤러에 사용되는 값을 포함하도록 id 값이 필요합니다

나는 컨트롤러를 결정하는 값이 실제로 페이지의 ID의 일부 URL을 갖고 싶어 그래서 우리는 다음과 같은 URL이있는 경우 위의 :

/chelsea-football-team/view/2010-2011 

내가 {ID} 값이 이상적으로, "첼시 풋볼 팀"은 컨트롤러로 "축구 팀"가되고 싶어요를, 액션 "보기"가되고 추가 값은 "2010-2011"이됩니다.

컨트롤러 값이 경로 정의에 하드 코딩 된 여러 경로가있는 데 문제가 없지만 여러 컨트롤러 값을 가질 수 있어야합니다.

컨트롤러의 값을 간단하게 결합 할 수 있다는 것을 알고 있지만, 추가 된 많은 반복 코드가 추가됩니다. 따라서 다른 방식으로도 달성 할 수 있습니까?

왜 이것을하고 싶습니까? 팀 이름을 전체적으로 사용해야하기 때문에 팀 이름의 일부는 항상 컨트롤러 이름과 일치하므로 경로에서 결합하지 않는 이유는 무엇입니까?

+0

'{further-values} '가 {{* furtherValues}'가되어서는 안됩니까? 액션 메소드에 하이픈으로 된 인수를 만들 수 없으므로? – danludwig

+0

사실은 코드를 작동시키는 것이 아니라 Im의 후속 작업에 대한 일반적인 표현입니다. – Moo

답변

1

{id} 값을 "chelsea-football-team", 컨트롤러를 "football-team"으로, 액션을 "view"로, 추가 값을 "2010- 2011 ". 당신은 표준 라우팅 구현을 사용하여, 하나의 매개 변수 (ID)를 모두 표현되도록 URL과 컨트롤러 경로 매개 변수를 결합 할 수 없습니다 코멘트 1

...MapRoute(null, "{id}/{action}/{*furtherValues}", 
     new { 
      controller = "FootballTeam", 
     }); 

업데이트. id를 "chelsea-football-team"으로 지정하려면 자체 경로 매개 변수 여야합니다. MVC가 id에서 컨트롤러 이름을 추출하는 방식으로 결합 할 수 없습니다.

public class MyCustomRoutingPattern : RouteBase 
{ 
    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     // do your coding and return an instance of RouteData 
    } 
} 

당신은 다음과 같이 사용합니다 : :

routes.Add(new MyCustomRoutingPattern(
    "{id}/{action}/{*furtherValues}")); 

귀하의 RouteBase 구현은 다음에서 컨트롤러를 추출 할 수

이 요구 사항을 충족하기 위해 사용자 정의 RouteBase 구현을 만들어야 할 수도 있습니다 id 매개 변수 Steve Sanderson과 Adam Freeman의 Pro ASP.NET MVC3 Framework 책에는 RouteBase 클래스를 재정의하는 방법에 대한 섹션이 있습니다.

+0

아니, 왜냐하면 하나의 컨트롤러로 제한하기 때문에, 내가 정의하거나 URL에 사용 된 컨트롤러에 힌트를 요구할 때. 답변 tho 주셔서 감사합니다 :) – Moo