2009-07-17 3 views
13

오버로드에 대해 보았던 모든 예는 일반적으로 다른 매개 변수가있는 동일한 이름의 두 메서드와 GET 동사를 사용하는 두 개의 메서드 만 사용하고 다른 하나는 POST를 사용합니다. 동일한 동사를 사용하여 같은 방법으로 두 개 이상의 오버로드를 수행 할 수 있습니까? 난 당신이 기본적으로 하나의 동사와 같은 작업 이름 과부하 수 있다고 생각하지 않습니다 Can you overload controller methods in ASP.NET MVC?동일한 동사를 사용하여 asp.net MVC 컨트롤러 메서드 오버로드?

답변

8

:

여기 내가 말하는 겁니다 무엇의 예입니다. 여러분이 가리키는 다른 스레드가 말하듯이, 메서드를 오버로드하여 & 속성을 사용하여 메서드에 매핑되는 동작을 변경할 수 있습니다. 그러나 나는 그것이 여러분이 찾고있는 것이 아니라고 추측합니다.

이전에 사용한 또 다른 옵션은 단순히 매개 변수에 nullable 값을 사용하는 것입니다. & 효과적으로 다른 서명을 병합하십시오. 그래서 대신 :

public ActionResult DoSomething(int? id, string? name) 

아니 좋은 솔루션을하지만, 하나의 과부하 그냥 다음 서로의 너무 나쁜 타협을 구축하는 경우 :

public ActionResult DoSomething(int id)... 
public ActionResult DoSomething(string name)... 

는 있습니다.

가야 할 가치가있는 최종 옵션은 하나만 시도해 보았습니다. (시도하지 않고 &도 작동하는지는 모르지만 논리적으로해야합니다), ActionMethodSelectorAttribute의 구현을 작성하여 ControllerContext에서 메소드 서명 &에 전달 된 매개 변수가 가장 일치하는 부분을 시도합니다 (즉, 기본 구현보다 모호한 부분을 좀 더 엄격하게 해결하려고 시도합니다).

+0

이것은 내가하는 일이지만, public ActionResult DoSomething (int? id, string name) 으로 작성하고 메소드에서 String.IsNullOrEmpthy (name)에 대한 검사 만 수행하십시오. – Chris

0

아니 겠지요. 내가 MVC 프레임 워크는 정말 매개 변수 목록에 넣어하든 상관하지 않았다는 것을 발견 때문에, 예를 들어, 내 작업은 같은 것입니다 :

public ActionResult Index(int id) {...} 

이 같은 요청 괜찮 : Domain.com/Index.aspx 또는 Domain.com/Index.aspx?id=012901 또는 프로그래밍 언어로 오버 이후에도 Domain.com/Index.aspx?login=938293

입력을 사용하면 (같은 이름의) 다른 기능을 선택할 수 있다는 것을 의미 매개 변수,하지만이 경우 MVC는 그것에 대해 신경 안써! 그래서 ActionVerb 오버로드 이외에, 나는 그것이 좋지 않다라고 생각한다.

+0

예, URL 구문 때문에 {controller}/{action}/{id} 형식 구문을 사용하고 있습니다. – 4thSpace

+0

오버로드를 테스트하는 것과 같은 구문을 시도하지는 않았지만 여전히 ASP.net MVC가 id (매개 변수)를 문자열로 처리하고 동작에 전달하기 때문에 여전히 가능하지 않습니다 (유형 변환하려고 시도 할 수 있음). 액션이 int 만 받아 들일 수는 있지만 그 경우에는 id가 정수가 아닌 경우 약간의 에러가 발생할 수 있습니다) – xandy