2008-09-24 6 views
8

뷰를 구성하는 방법과 혼동 스럽습니다. ASP.NET MVC가 모든 작업을 올바르게 수행하기 위해 규칙을 사용함에 따라이를 이해하는 것이 중요합니다.ASP.NET MVC에서 뷰 파일/디렉토리 구조는 무엇이되어야합니까?

views 디렉토리 아래에 하위 디렉토리가 있습니다. 이러한 하위 디렉토리에는보기가 있습니다. 하위 디렉토리가 컨트롤러에 매핑되고 컨트롤러가 하위 디렉토리에 포함 된 뷰에 대해 작동한다고 가정합니다.

이러한 디렉토리에 어떤 유형의보기가 포함될 것으로 예상됩니까? 예를 들어 각 디렉토리의 기본 페이지가 index.aspx 여야합니까? 페이지가 Create [controller] .aspx, List [controller] .aspx 등과 같은 명명 규칙을 준수해야합니까? 또는 그것은 중요하지 않습니까?

답변

7

디렉터리 이름 지정 및 파일 명명보기는 ASP.NET MVC 프레임 워크에서 특정 가정을하기 때문에 중요합니다. 이러한 가정을 준수하지 않으면 프레임 워크에서 수행중인 작업을 알 수 있도록 코드를 작성해야합니다. 일반적으로 말해서, 당신은 좋은 가정을하지 않는 한 이러한 가정에 따라야합니다. 가장 간단한 컨트롤러 액션에서

살펴 보자 :

public ActionResult NotAuthorized() 
    { 
     return View(); 
    } 

더보기 이름) (보기의 호출로 지정되지 않았기 때문에, 프레임 워크는 뷰 파일 이름이 동작과 동일하다고 가정한다 이름. 프레임 워크에는 ViewEngine이라는 유형이있어 확장을 제공합니다. 기본 ViewEngine은 WebFormViewEngine입니다. WebFormViewEngine은 해당 이름을 사용하고 .aspx를 추가합니다. 이 경우 전체 파일 이름은 NotAuthorized.aspx입니다.

그러나 어떤 폴더에 파일이 있습니까? 다시, ViewEngine은 그 정보를 제공합니다. WebFormViewEngine, 그것은 두 개의 폴더에서 찾게됩니다 : ~/조회/공유하고 ~/조회/{컨트롤러} 컨트롤러가 AccountController 호출 된 경우에 따라서

, 그것은 ~/뷰에 보일 것이다/계정

그러나이 이 규칙을 따르고 싶지 않을 때가있을 것입니다. 예를 들어, 두 개의 다른 동작이 동일한 뷰를 반환 할 수 있습니다 (다른 모델 또는 무언가 포함). 이 경우, 당신은 당신의 행동에 명시 적으로 뷰 이름을 지정하는 경우 : WebFormViewEngine과 함께 "보기 이름은"일반적으로 파일 이름, 적은 확장과 동일하지만 프레임 워크가 필요하지 않습니다

public ActionResult NotAuthorized() 
    { 
     return View("Foo"); 
    } 

주 다른 뷰 엔진의 그것.

마찬가지로 응용 프로그램에서보기 및 기본이 아닌 폴더를 찾는 이유가있을 수도 있습니다. 자신 만의 ViewEngine을 만들면됩니다. 나는 기술을 this blog post에 보여 주지만 이전 버전의 프레임 워크 용으로 작성되었으므로 형식 이름이 다릅니다. 그러나 기본 아이디어는 여전히 동일합니다.

+0

보기 내의 폴더에 하위 폴더가있을 수 있습니까? 그렇다면 컨트롤러가 어떻게 도달합니까? 예를 들어 ... Admin/Profile/Edit/1 –

+0

이렇게하려면 자신 만의 ViewEngine을 작성해야합니다. WebFormViewEngine은 해당 항목을 찾지 않습니다. –

+0

@Eric Web Form 뷰 엔진 인스턴스의'ViewLocationFormats' 설정은 뷰를 하위 폴더에 넣는 데 필요한 모든 것입니다. – bzlm

2

전망의 예상 이름과 관련하여 각 프로젝트 또는 조직이 표준화하려고 시도하는 것 중 하나라고 생각합니다.

귀하가 궁금해했던 것처럼, 이러한 뷰 중 일부 (또는 더 정확하게는 이들을 렌더링하는 액션)는 전반적으로 인기가있을 수 있습니다 (예 : 아래의 RoR 애플리케이션에서 일반적으로 사용되는 뷰) REST 패러다임 :

  • /orders인덱스) 새/123
  • /주문
  • /주문/쇼/123
  • /주문/편집/123
  • /주문/업데이트/
  • /주문/
  • /주문을 생성/파괴/123

보기의 선택/표준화는 응용 프로그램을 모델링하는 방법 (명백한 말)과 이동 방법에 따라 크게 달라집니다. 컨트롤러를 개별 모델 클래스 (기침 ... 리소스 ... 기침)에 더 가까이 맵핑할수록 액션이 짧아지고 더 쉽게 표준 액션 세트를 따라갈 수 있습니다 (위의 예에서와 같이)).

나는 또한 짧은 행동 만이 모델 비즈니스 로직을 점점 더 많이 모델에 포함시킬 수 있다고 믿는다.

관련 문제