문제

ASP.NET MVC가 컨벤션을 사용하여 모든 것을 올바르게 작동시키기 때문에이를 이해하는 것이 중요합니다.

Views 디렉토리 아래에는 하위 디렉터가 있습니다. 이 하위 디렉토리 내부에는보기가 있습니다. 하위 디렉토리가 컨트롤러에 매핑되고 컨트롤러는 하위 디렉토리에 포함 된 뷰에 작용한다고 가정합니다.

이러한 디렉토리 내에 어떤 유형의 견해가 포함되어 있는지에 대한 새로운 기대가 있습니까? 예를 들어 각 디렉토리의 기본 페이지가 index.aspx 여야합니까? 페이지가 Create [Controller] .aspx, List [Controller] .aspx 등과 같은 명명 규칙을 따라야합니까? 아니면 중요하지 않습니까?

도움이 되었습니까?

해결책

ASP.NET MVC 프레임 워크가 이에 대해 특정 가정을 만들기 때문에 디렉토리보기 이름 지정 및 파일 이름 지정이 중요합니다. 이러한 가정을 준수하지 않으면 프레임 워크에 자신이하고있는 일을 알리기 위해 코드를 작성해야합니다. 일반적으로 말하면, 당신은 아무런 이유가 없다면 이러한 가정을 준수해야합니다.

가장 간단한 가능한 컨트롤러 동작을 살펴 보겠습니다.

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

Call to View ()에보기 이름이 지정되지 않았으므로 프레임 워크는보기 파일 이름이 동작 이름과 동일하다고 가정합니다. 프레임 워크에는 확장을 제공 할 ViewEngine이라는 유형이 있습니다. 기본 ViewEngine은 WebFormViewEngine이며 해당 이름을 가져 와서 .aspx를 추가합니다. 따라서이 경우 전체 파일 이름은 공인되지 않습니다.

그러나 어떤 폴더에서 파일을 찾을 수 있습니까? 다시 한번, ViewEngine은 그 정보를 제공합니다. WebFormViewEngine을 사용하면 두 개의 폴더로 보입니다. ~/views/shared 및 ~/views/{컨트롤러}

따라서 컨트롤러가 AccountController라고 불리면 ~/Views/Accound에서 볼 수 있습니다.

그러나이 규칙을 따르고 싶지 않은 경우가있을 수 있습니다. 예를 들어, 두 가지 다른 동작이 동일한보기 (다른 모델 또는 무언가)를 반환 할 수 있습니다. 이 경우, 귀하의 행동에서보기 이름을 명시 적으로 지정하는 경우 :

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

WebFormViewEngine의 경우 "보기 이름"은 일반적으로 파일 이름과 동일하지만 확장자는 적지 만 프레임 워크에는 다른 뷰 엔진의 프레임 워크가 필요하지 않습니다.

마찬가지로, 응용 프로그램이 뷰 및 비 디폴트 폴더를 찾기 위해 원하는 이유가있을 수도 있습니다. 자신만의 뷰 엔진을 만들어 그렇게 할 수 있습니다. 나는 기술을 보여줍니다 이 블로그 게시물, 그러나 유형 이름은 이전 버전의 프레임 워크에 대해 작성되었으므로 다릅니다. 그러나 기본 아이디어는 여전히 동일합니다.

다른 팁

견해에 대한 예상 이름과 관련하여 각 프로젝트 나 조직이 표준화하려고하는 것 중 하나라고 생각합니다.

당신이 당신의 의문을 암시했을 때, 이러한 견해 중 일부 (또는 더 정확하게는 그것들을 렌더링하는 행동)가 전반적으로 인기를 얻을 수 있습니다.

  • / Orders/ (예 : 인덱스)
  • /주문/쇼/123
  • /주문/편집/123
  • /주문/업데이트/123
  • /주문/신규
  • /주문/생성
  • /주문/파괴/123

보기의 선택/표준화는 응용 프로그램을 모델링하는 방법 (명백한 말)과 얼마나 세밀하게 가고 싶어하는지에 크게 의존합니다. 컨트롤러를 개별 모델 클래스 (기침 ... 리소스 ... 기침)에 매핑할수록 행동이 짧을수록 행동이 더 쉽고 쉽게 행동 할 수 있습니다 (위의 예에서와 같이 표준 행동 세트를 따를 수 있습니다. ).

또한 짧은 행동이 점점 더 많은 모델 비즈니스 로직을 모델 자체에 속하는 데 도움이된다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top