2010-08-10 3 views
3

사람들이 다음과 같은 상황을 어떻게 처리하는지 알고 싶습니다. Asp.Net MVC 경로 - 동일한 서명으로 여러 경로를 처리 하시겠습니까?

우리가 수 DataField 각을 DataField이 DataValues ​​

우리는 이러한 개체

  • 의 조작을 처리하기 위해이 컨트롤러가 무제한 DataFieldController
  • DataValueContoller

을 가질 수 있다고 가정 이제 새로운 DataValue를 추가해야하는 경우 CustomDataField의 ID를 알아야합니다. ASp.Net MVC 엔진 모델 (IE 아래의 경우에 매개 변수 이름을 결합하기 때문에 다음과 같은 URL이

그러나

/CustomDataValue/Add/1 

1 = 수 DataField ID

을 사용됩니다. 내 DatValeu 개체 것 그 ID가 실제로 FieldID를 통과하려고 할 때 ID가 대체 됨)

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

어떻게 처리 할 수 ​​있습니까? 다음을 분명히하는 것은 효과가 없습니다.

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

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

나는 이것이 일반적인 문제라고 가정합니다. 나는 그 순간에 명백한 해결책을 찾지 못했습니다. Signature가 다르지만 둘 다/String/String/Int이면 괜찮습니다.

=============

어떻게 이러한 경로가 작동합니까?

  • /DataValue/추가/{DataFieldID}
  • /DataValue/편집/{ID}
  • /DataValue/목록/{DataFieldID} 나는 3 개 경로를 추가해야합니다

? 이 같은 경로에

+0

내 대답을 편집했습니다. 나는 그것이 도움이되기를 바랍니다. 나는 오랫동안 주변에 있지 않을 것이다. 문제가 해결되지 않으면 다시 질문 할 수 있습니다. –

답변

5

사용 제약 :

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

는 "CustomDataValue는"이 경로 호출로 시작해야합니다 URL 만합니다. 기본 경로와 다른 상수로 선언되었습니다. 이러한 지정된 경로가 기본 경로 앞에 선언되어 있는지 확인하십시오. 제한이 없기 때문에 모든 URL이 일치됩니다.

업데이트

난 당신이 http://domain.com/CustomDataValue/Add/23 같은 URL을 DataValueController 메소드를 호출해야 할 것 같아요. 이 경우 다음 경로를 사용하십시오.

routes.MapRoute(
    "CustomData", // Route name 
    "CustomDataValue/{action}/{fieldid}", // URL with parameters 
    new { controller = "DataValue", action = "List", fieldid = UrlParameter.Optional } // Parameter defaults 
); 

List/Add/Edit라는 DataValueController에 작업 방법이있는 경우 작동합니다.

+0

그러나 FieldId는 List에만 필요하고 {id}는 추가/편집/삭제에 필요합니다. 많은 경로를 만들 수 있습니다! – LiamB

+0

List 및 Edit라는 작업 메서드가있는 경우 작동합니다. 요점은 다음과 같습니다. 홈은 URL에 조치가없는 경우 호출 할 기본 조치입니다. http://domain.com/CustomDataValue 및 http://domain.com/CustomDataValue/Home은 모두 동일한 액션 인 홈 액션에 연결됩니다. –

+0

이 [블로그 게시물] (http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx)을 읽고 라우팅에 익숙합니다. –