2017-12-22 3 views
0

범위를 필터링하기위한 여러 매개 변수를받는 컨트롤러 동작을 만든 다음 최종 매개 변수는 결과를 페이징하는 데 필요한 페이징 매개 변수입니다.MVC4 Route의 중간 매개 변수 (선택 사항)

//Example Action 
public ActionResult Details(string time, string regionscope, string localscope = null, int page = 1) { 

} 

//RouteConfig.cs 
routes.MapRoute(
    name: "LocationWithLocalScopeRoute", 
    url: "/Details/{time}/{regionscope}/{localscope}/{page}", 
    defaults: new 
    { 
     controller = "Location", 
     action = "Details", 
     localscope = UrlParameter.Optional 
    } 
); 

내가 localscope 매개 변수를 제외 할 수 있지만 (여전히 꽤 URL을 유지하면서) 아직 page 매개 변수는 컨트롤러에 의해 페이지로 해석 될 수있다 어쨌든이 있나요?

// Test URLs 
/Details/May-17/Mid/1 
/Details/May-17/Mid/Bumville/1 

는 내가 기존 경로 전에 경로를 추가 할 수 있습니다 알고

//RouteConfig.cs 
routes.MapRoute(
    name: "LocationWithNoLocalScopeRoute", 
    url: "/Details/{time}/{regionscope}/{page}", 
    defaults: new 
    { 
     controller = "Location", 
     action = "Details" 
    } 
); 

나는 또한 내가 다른 매개 변수의 전에 page를 둘 수 있었다 알고 있습니다.

routes.MapRoute(
    name: "LocationWithLocalScopeRoute", 
    url: "/Details/{page}/{time}/{regionscope}/{localscope}", 
    defaults: new 
    { 
     controller = "Location", 
     action = "Details", 
     localscope = UrlParameter.Optional 
    } 
); 

테스트 URL이 작동하는 동안 하나의 경로 정의에서 모두 작동하도록 만드는 방법이 있는지 궁금한가요?

+0

짧은 답변은 아니오입니다 (여러 경로를 만들지 않는 한). 마지막 매개 변수 만 선택적 일 수 있습니다. –

+0

@StephenMuecke 다른 옵션 중 내가 추가 한 것은 무엇입니까? 또는 다른 방법이 있다면, 나는 그것을 읽은 것을 기쁘게 생각합니다. – SomeShinyObject

+1

개인적으로 나는 페이지 번호가 마지막 인 페이지 번호를 갖는 URL로서 더 의미가 있다고 생각하기 때문에 첫 번째 옵션을 사용할 것입니다. –

답변

1

아니요, 다른 특정 경로를 만들거나 localscope을 마지막 매개 변수로 지정하지 않아도됩니다.

라우팅을 사용하는 경우 마지막 매개 변수 만 UrlParameter.Optional으로 표시 할 수 있습니다. 더 많은 것이 선택적인 경우 라우팅 엔진은 어떤 경로 세그먼트가 어떤 메소드 매개 변수에 적용되는지를 알 수있는 방법이 없습니다. URL이 ../Details/May-17/Mid/1 귀하의 경우

localscope에 대한 1 값의 값 또는 page의 값과 마지막 세그먼트입니까? 이를 결정할 방법이 없기 때문에 @Url.Action() (또는 다른 URL 생성 방법 중 하나)을 사용하여 URL을 생성하면 url은 경로 값이 아닌 쿼리 문자열 값으로 생성됩니다.

관련 문제