13

저는 지난 한 달 동안 거대한 MVC 애플리케이션을 작업 해 왔지만, 이제는 커스텀 라우트 핸들러를 정의해야 할 필요가 있습니다. 몇 가지 문제가 있습니다. 기본적으로 나는 전달할 두 개의 매개 변수가 있습니다. 첫 번째 것은 필수이고 두 번째 것은 선택 사항입니다.하나의 필수 매개 변수와 하나의 선택적 매개 변수가있는 ASP.NET MVC 라우팅?

나는이 대답을 따르고있다 here. 여기

내 사용자 정의 경로입니다 :

routes.MapRoute(
    "MyRoute", 
    "{controller}/{action}/{param1}/{param2}", 
    new { 
     controller = "MyController", 
     action = "MyAction", 
     param1 = "", 
     param2 = "" // I have also tried "UrlParameter.Optional" here. 
    } 
); 

그리고 내 액션 메소드 서명 : 나는 URL을 시도 할 경우 I가 그것을 기대처럼

public ActionResult MyAction(string param1, string param2) 

http://[myserver]/MyController/MyAction/Test1/Test2 다음은 PARAM1 = "Test1을 함께 작동 "및 param2 ="Test2 "

URL을 시도 할 경우 http://[myserver]/MyController/MyAction/Test1 두 매개 변수는 모두 null입니다.

내가 잃어 버렸기 때문에 누군가 내가 여기서 잘못하고있는 것을 말할 수 있기를 바랍니다.

+0

안녕 - 이제 라우팅 속성 시도 - WAY WAY 쉽고 오류가 발생하기 쉽습니다. – niico

답변

13

난 당신이 새로운 경로를 생성하고 당신과 매우 유사 기본 하나를 왼쪽 가정을 HEP 생각이처럼 완패를 만들 수 있습니다. 첫 번째로 일치하는 경로를 찾으려면 경로 수집을 통과해야합니다. 기본을 떠난 그래서 경우 : 경로 위의

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

는이 id라는 이름의 매개 변수 http://[myserver]/My/MyAction/Test1에 요청을 일치 MyController.MyAction를 호출하고 "텍스트 1"을 설정합니다. 이 작업은 id이라는 이름을 지정하지 않기 때문에 실패합니다.

이 모든 트래픽을 강제
routes.MapRoute(
      "Route", 
      "My/{action}/{param1}/{param2}", 
      new 
      { 
       controller = "My", 
       action = "MyAction", 
       param1 = "", 
       param2 = "" 
      }); 

이 경로에 맞게 저점 My 라우팅 : 당신이해야 할 일은

그런 다음 지금 경로 목록에 첫 번째로 경로를 이동하고보다 구체적인 확인하는 것입니다.

+1

내가 무엇을 하든지 관계없이이 매개 변수에서 여러 매개 변수를 사용할 수는 없습니다. 2 개의 매개 변수를 만들고 'My/MyAction/param1/param2'와 같은 URL로 페이지를 요청하면 404 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? – DavidHyogo

1

안녕 당신은 내가이 당신에게

routes.MapRoute(
       "Regis", // Route nameRegister 
       "Artical/{id}", // URL with parameters 
       new { controller = "Artical", action = "Show", id = UrlParameter.Optional } // Parameter defaults 
      ); 
0

는 "UrlParameter.Optional"를 사용하여 선택 사항으로서 하나 개의 매개 변수를 지정하고 데이터 유형 번째 지정된 수

routes.MapRoute("MyRoute", 
       "myRoute/{param1 }/{param2 }", 
       new { controller = "MyController", action = "MyAction", param2 = UrlParameter.Optional }, 
       new { param2 = @"\w+" }); 

이 그 다음에 데이터 형식 (@ "\ D +")의 정수 값을 전달하는 경우 의미 시도 그리고 문자열에 대해서는 위에 언급되어 있습니다.

참고 : 매개 변수의 순서가 선택적 매개 변수가 마지막에 전달하고 Gloab.asax에서 기본 경로 전에 새 경로를 등록해야합니다 매우 중요합니다.

다음 행동 링크

<a href="@Url.RouteUrl("MyRoute", new { param2 = "Test1",param1 = "Test2"})">Test</a> 

같은 또는 하나 개의 매개 변수 당신에

<a href="@Url.RouteUrl("MyRoute", new { param2 = "Test1"})">Test</a> 

와 컨트롤러 미래에서

public ActionResult MyAction(string param2,string param1) 
{ 
    return View() 
} 
관련 문제