2011-03-06 2 views
0

요청시 매개 변수 수에 따라 동작 방법을 오버로드 할 수 있습니까?asp.net mvc의 매개 변수 수에 대한 오버로드 동작

예 :

1 domain.com/List/Filter/ByName 가 호출 ->public ActionResult Filter(string criteria1)

2 domain.com/List/Filter/ByName/ByRanking 가 호출 -> 내가 asp.net의 MVC2를 사용하고 public ActionResult Filter(string criteria1, string criteria2)

.

+0

확실하지 않지만 ActionResult 메서드에서 프로그래밍 방식으로 다른 ActionResult 메서드를 호출 할 수 있습니다. 나는 이것을 많이한다. – CarneyCode

답변

1

가장 좋은 방법은 두 개의 다른 컨트롤러 메서드를 추가하고 두 개의 서로 다른 URL에 매핑하는 것입니다. 이것은이 두 번째 컨트롤러에이 URL List/Filter/xxCriteriaName/xxxCriteriaRank 매핑합니다 첫 번째 컨트롤러

routes.MapRoute(
      "Filter",            // Route name 
      "{controller}/Filter/{criteria1}",       // URL with parameters 
      new { controller = "List", action = "Filter1", criteria="" } // Parameter defaults 
     ); 

이 URL List/Filter/xxCriteria/을 매핑합니다

:

public ActionResult Filter1(string criteria1); 

public ActionResult Filter2(string criteria1, criteria2); 

그런 다음 두 개의 경로 정의를 가지고있다. 이 경로없이 여전히 두 번째 방법에 URL을 매핑 할 수 있지만처럼 보일 것입니다 :

routes.MapRoute(
      "Filter2",            // Route name 
      "{controller}/Filter/{criteria1}/{criteria2}",       // URL with parameters 
      new { controller = "List", action = "Filter2", criteria1 = "", criteria2 = "" } // Parameter defaults 
     ); 

List/Filter/?criteria1=xx&criteria2=xx가 도움이 바랍니다.

+0

으악 : 안녕하세요 오버로드를 사용하지 않고 두 가지 필터 방법을 사용했습니다. 질문을 수정했습니다. = P – gideon

+0

URL 중 하나에서 자원을 찾을 수 없지만 두 번째 URL은 정상적으로 작동합니다. 무엇이 문제 일 수 있습니까? – maX

+0

@maxxxee 아, 그것의 URL은'{criteria1}'이어야합니다 ** ** 1 ** ** 편집 내역보기. 답을 바 꾸었습니다. – gideon

3

URL을 여러 개의 오버로드 된 메소드로 모호하게하는 합리적인 방법이 없으므로 매개 변수를 기반으로 액션 메소드를 오버로드 할 수 없습니다.

public ActionResult Filter(string criteria1, string criteria2) 

다음 criteria2는 이름으로 필터링 널인지 확인하십시오

할 수있는 일,하지만 중 하나 이것이다.

또는, 당신은 당신의 액션 메소드

[ActionName("FilterByName")] 
public ActionResult Filter(string criteria1) 

[ActionName("FilterByNameAndRanking")] 
public ActionResult Filter(string criteria1, string criteria2) 

을 장식하고 경로 등록에 그 이름을 사용하는 ActionNameAttribute를 사용할 수 있습니다. 그러나이 방법은 많은 혼란을 야기 할 수 있습니다.

+1

+1 아아, 그 속성에 대해 몰랐습니다. 별도의 작업 이름 즉 않아도이 – gideon

+0

어떻게 다른 : 같은 2 개 개의 다른 액션 메소드를 가진 것으로 위의 같은 밤은 을 공공 ActionResult FilterByName (문자열 criteria1) 공공 ActionResult FilterByNameAndRanking (문자열 criteria1, 문자열 criteria2) – maX

관련 문제