2010-02-24 6 views
0

지금까지는 여전히 표준 라우팅이 있습니다. 내가 뭘하려고하는 것은 내가 입력 한 URL이 로컬 호스트/푸/색인이었다모호한 경로 ASP.Net MVC 사용

public Foo : Controller 
{ 
    public ActionResult Index(int id) 
    { 
     return View("List", repo.GetForId(id)); 
    } 

    public ActionResult Index() 
    { 
     return View("List", repo.GetAll()); 
    } 
} 

입니다. 나는 내가 원하는 방법을 알기에 충분히 영리하다는 것을 알았습니다. 내가 듣기는하지만 그 전화가 애매하다고 말하는 것은 실수입니다. 경로 자습서를 읽는 것으로부터 나는 이것이 효과가있을 것이라고 생각했습니다. 내가 뭘 놓치고 있니?

죄송합니다 :

중복. 나는 닫을 것을 표명하고있다.

+0

경로는 어떻게 생겼습니까? global.asax에는 무엇이 있습니까? –

답변

2

메서드 오버로드 (동일한 이름의 두 동작)는 HTTP 동사를 기반으로합니다. 이 이름이 같은 두 가지 작업을하려는 경우는 HTTP 동사에 의해 그들을 구별해야한다는 것을 의미 그들은 동의 :

public ActionResult Index(int id) 
{ 
    return View("List", repo.GetForId(id)); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index() 
{ 
    return View("List", repo.GetAll()); 
} 

을 첫 번째 작업이 호출됩니다 GET /Home/Index를 호출 따라서 때 당신이 POST /Home/Index를 호출 할 때 두 번째 호출됩니다.

id 인수로 null 입력 가능 정수를 사용해야합니다. 요청에 전달 된 매개 변수가 없으면 모델 바인더가 실패하기 때문입니다. 둘 다 /Home/Index/Home/Show/10 요청을 처리 할 수 ​​

public ActionResult Index() 
{ 
    return View(repo.GetAll()); 
} 

public ActionResult Show(int id) 
{ 
    return View(repo.GetForId(id)); 
} 

:

이 처리하는 편안한 방법은, 내가 당신을 제안 규칙을 다음과 같은 것은 이것이다. 첫 번째 것은 IEnumerable<T>으로 강하게 입력되고 두 번째 것은 T으로 강하게 입력되므로 다른보기도 있습니다.

+0

그래서 나는 그들을 쪼개었다. null이 될 수 있기 때문에 ID없이 처리하는 방법과 ID없이 처리하는 방법이있는 시나리오를 원했습니다. 기본적으로 여기에있는 id 매개 변수는 필터처럼 작동합니다. 그래서 거기에 있다면 그룹에 속한 모든 엔티티를 얻고 싶습니다. id가 없다면 모든 엔티티를 가져 오면됩니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? – uriDium

+0

동사가 다른 색인에 있어야하지 않습니까? 매개 변수가없는 것은 동사가 필요없고 다른 하나는 그것을 가질 가능성이 더 클 것이라고 나에게 보인다. – BenAlabaster