2011-10-07 4 views
1

여러 컨트롤러를 단일 뷰 디렉토리에 매핑하는 방법이 있습니까? 내 응용 프로그램에서 나는 컨트롤러와 뷰 사이에 1 대 1 매핑을 원합니다. 그 이유는 각보기가 제어기가 여러 가지보기를 제공하고 제어기 당 여러 개의보기를 갖는 다양한 아약스 조치를 갖게되어 지나치게 큰 제어기를 초래하기 때문입니다.ASP.NET MVC3 컨트롤러를 뷰에 매핑

은 현재이 같은 뭔가를 :

/Controllers 
    /Dir1Controller 
    ... 

/Views 
    /Dir1 
     /FirstView.cshtml 
     /SecondView.cshtml 
     ... 

그래서있는 Dir1 컨트롤러 디렉토리에있는 Dir1에 대한지도와 전망 FirstView, SecondView 등 대신에 모든 작업을 제공 할 필요가 , 나는 이런 식으로 뭔가를 선호 :

/Controllers 
    /FirstController 
    /SecondController 
    ... 

두 컨트롤러가 모두 Dir1에 매핑되지만 작업이 실행될 때 적절한보기를 반환합니다.

이 중 아무 것도 경로 매핑 측에서 문제가되는 것 같지 않지만 올바른보기를 찾는 방법을 알려주는 방법이없는 것처럼 보입니다. FirstController는/Views/First에서보기 만 찾습니다./Views/Dir1을 보도록 지시 할 수있는 방법이 있습니까?

지역을 사용하여 살펴 보았지만 큰 사이트를 비웃는 방향으로 향하는 것처럼 보입니다. 개념적으로이 모든 페이지는 동일한 영역의 일부 여야합니다. 난 그냥 내 컨트롤러의 크기를 경계하고 싶습니다.

+0

논리를 뒤집고 Ajax 호출마다 별도의 컨트롤러를 만드는 것이 좋습니다. 심지어 그 중 일부를 재사용 할 수도 있습니다. – Druegor

답변

2

Ajax 호출이 하나의 컨트롤러와 관련된 경우 기존 패턴을 고수하고 컨트롤러에 메소드가 있습니다. 재사용 할 수있는 경우 부분보기 또는 제어기를 목적에 맞게 구성하고 Ajax 호출을 수행 할 때 제어기 및 조치를 요청하십시오. 이것은 이유에 대한 전형적인 패턴이며, 왜 외부로 나가는가? :)

+0

이것은 좋은 생각입니다. 아약스 호출이 뷰에 매핑 될 필요가 없다는 것을 알지 못합니다 (그들은 json 객체를 반환하기 때문에 별도로 처리 할 수 ​​있습니다). 감사! – zaq

1

보기를 명시 적으로 반환하지 않는 이유는 무엇입니까? 컨트롤러의 모든 행동이 동일한 뷰를 반환하는 경우

return View("~/Controllers/FirstController/view.cshtml"); 

는, 컨트롤러 클래스의 상단에 상수를 사용, 뭔가 같은 :

public class myController 
{ 
    private string ViewPath = "~/Controllers/FirstController/view.cshtml"; 
    ... 

그런 식으로 당신은 단지에 경로를 설정해야 각 컨트롤러에서 한 번보기. 그런 다음 각각의 액션 메소드에서 :