2011-01-03 4 views
0

경로에 매개 변수를 전달하려고하는데 어려움을 겪고 있습니다. 아래 그림과 같이 내가 URL에 "기사/230"을 입력 할 때이 세부 조치를 호출해야합니다 :ASP.NET MVC 3.0 경로 및 전달 매개 변수

public ActionResult Detail(int id) 
     { 
      return View(); 
     } 

나는 내 Global.asax 파일에 다음과 같습니다

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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


      ); 

      routes.MapRoute(
       "ArticleDetails", // Route name 
       "Articles/{id}", // URL with parameters 
       new { controller = "Articles", action="Detail", id = 0 } // Parameter defaults 

      ); 

     } 

그리고 보기는 다음과 같습니다.

답변

2

경로의 순서는 정의 된 순서와 동일하게 평가되므로 중요합니다. 당신이 Articles/123를 요청할 때

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "ArticleDetails", 
     "Articles/{id}", 
     new { controller = "Articles", action = "Detail", id = 0 } 
    ); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Articles", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

가 지금은 Articles 컨트롤러의 Detail 조치를 호출하고 id 매개 변수로 123를 전달합니다 : 그래서 oimply 순서를 반전.

+0

감사합니다. Darin! 그것이 작동했지만 왜 주문이 중요하고 원래의 코드에서 순서가 잘못되어도 경로와 일치하지 않는 이유는 무엇입니까? – johndoe

+0

라우트 엔진은 게으른 일치를 기반으로 작동합니다. 기본 경로는 일치시킬 항목이 없으므로 (모든 값은 기본값을가집니다) 다른 규칙보다 먼저 일치합니다. –

+1

경로 정보를 평가하는 * 순서가 있어야하므로 순서가 중요합니다. :) 기사/123이 존재하지 않은 "기사"컨트롤러의 "123"작업을 호출하려고했기 때문에 원래의 주문이 작동하지 않았습니다. 첫 번째 (기본) 경로와 일치합니다. – Sapph