2012-09-24 2 views
1

나는 목록 컨트롤러가있는 Asp.Net Mvc 웹 사이트가 있습니다. 경로는 다음과 같습니다.기본 ID가있는 Asp.Net MVP 라우팅 문제

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "MySite.Web.Controllers" } 
); 

예쁜 표준입니다. 이제 목록 컨트롤러에 여러 컨트롤러 작업이 있습니다./listing/84에 가서 색인 작업이나/listing/create,/listing/edit,/listing/favorite, 또는/listing/others로 이동하여 해당 조치. 대부분의 내 경로에서 이미 그렇습니다. 이것은 내 컨트롤러 코드입니다 :

public ActionResult Index(long? id) 
{ 
    // my code that never gets hit 
} 

제가 누락 된 것이 있습니까? lisitng 것이

위해/

routes.MapRoute(
    "lisingid", // Route name 
    "listing/{Id}", // URL with parameters 
     new { controller = "listing", action = "Index", id = UrlParameter.Optional } 
); 

나는 희망 아이디

을 전달할 때 작업을 색인 작업에 대한

routes.MapRoute(
    "listingCreate", // Route name 
    "listing/Create", // URL with parameters 
     new { controller = "listing", action = "Create" } 
); 

만들기 탐색을위한 만들기, 그것은 도움이 될 것입니다

+0

는 내가 컨트롤러에서 여러 작업이 모두를 알리기 위해 질문을 편집했다. –

답변

3

당신은 ID에 대한이의 특정 경로 및 제약 조건을 정의 할 수 있습니다 :

routes.MapRoute(
    "ActionLess", 
    "{controller}/{id}", 
    new { controller = "Home", action = "Index" }, 
    new { id = @"^[0-9]+$" }, 
    new string[] { "MySite.Web.Controllers" } 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "MySite.Web.Controllers" } 
); 
+0

정말 감사합니다. 참으로 우아한 솔루션. –

0

당신은 두 개의 새로운 경로를 만들 수 있습니다 당신.

+0

한 가지 방법. 나는 그것이 나쁜 해결책이라고 생각하지 않지만 20 가지 다른 행동이 있다면 나는 20 가지 다른 방법을 만들어야 할 것입니다. –