2011-05-05 3 views
0

라우팅에서 긴 URL을 관리하는 가장 좋은 방법을 찾고 있습니다. 나는 다음과 같습니다 많은 동작이 있습니다URL에 매개 변수가 너무 많습니다. 라우팅 MVC

/a/b/c/d/e 

경로 :

routes.MapRoute(
      "xxx", 
      "{a}/{b}/{c}/{d}/{e}", 
      new { controller = "Xxx", action="Xxx"}); 

컨트롤러 :

public ActionResult Xxx(int a, int b, int c, int d, int e) { ... } 

PARAMS의 변화는 모든 경로/액션 멀티 변화를 준다, 그리고 그것은 문제입니다. 그것의 신축성이 없습니다. params를 어떤 객체에 매핑 할 수 있습니까? 같을 것이다 뭔가 :

public ActionResult Xxx(RouteParams rp) { ... } 

흠 ... 결국 나는이 해결하기 위해 작업 필터를 사용할 수 있다고 생각 :

private RouteParams rp; 
public override void OnActionExecuting(FilterExecutingContext filterContext) { 
    rp = new RouteParams(...); 
} 

을하지만이 솔루션처럼 해달라고

감사합니다

답변

4

여러분이했던 것처럼 객체를 만들고 ModelBinder를 사용하여 필터 대신 생성하십시오. 기본 모델 바인더가 작동해야하며 그렇지 않은 경우 사용자 정의 모델 바인더를 만듭니다.

public ActionResult Xxx(XxxModel model) 
{ 
    ... 
} 

:

public class XxxModel 
{ 
    public int a { get; set; } 
    public int b { get; set; } 
    public int c { get; set; } 
    public int d { get; set; } 
    public int e { get; set; } 
} 

그런 다음 작업에 매개 변수로 XxxModel를 사용

0

이 기능을 사용할 수 있습니까?

routes.MapRoute(
      "xxx", 
      "{*params}", 
      new { controller = "Xxx", action="Xxx"}); 

public ActionResult Xxx(string params) { ... } 

PARAMS이 될 것입니다 하나 개의 문자열 (예. 1/2/3/4/5) 당신이 매개 변수에 params.Split("/")Convert.ToInt32()을해야 할 것이다.

2

단지 경로 설정에서 매개 변수와 일치하는 특성을 가진 새로운 모델을 만들고, 같은 경로 설정을 유지 a, b, c, d 및 e는 모델의 특성에 맵핑됩니다.

관련 문제