_viewstart.cshtml 및 부분 면도기 뷰를 사용하는 올바른 방법은 무엇입니까?


156

_viewstart.cshtml 사용 하여 동일한 Razor Layout자동으로 뷰에 할당합니다 .

내 Views 폴더의 루트에 다음과 같이 죽은 간단한 파일입니다.

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

이것은 모든 단일 뷰에 @Layout 지시문을 추가하는 것보다 더 건조합니다.

그러나 이것은 Razor 부분 뷰에 문제가 있습니다. Razor 부분 뷰는 _viewstart.cshtml의 내용을 실행하므로 레이아웃을 잘못 할당하여 더 이상 부분적이지 않습니다.

다음은 _viewstart.cshtml 파일, 공유 _layout.shtml 파일 및 부분보기 ( "AnonBar.cshtml")를 보여주는 가상의 프로젝트입니다.

프로젝트 구조 예

현재이 문제를 해결하는 방법은 모든 부분보기에 다음 줄을 추가하는 것입니다.

@{
    Layout = "";
}

이것은 Razor에서 뷰를 부분적으로 나타내는 잘못된 방법 인 것 같습니다. (웹 양식보기 엔진과 달리 파일 확장자는 부분보기에서 동일합니다.)

내가 고려했지만 그보다 더 나쁜 다른 옵션 :

  • 모든 부분 뷰를 공통 폴더에 배치하여 공통 _viewstart.cshtml을 공유 할 수 있습니다. 이로 인해 뷰가 해당 컨트롤러와 동일한 폴더에있게됩니다.
  • 부분 뷰를 사용하지 않습니다.

이것이 Razor 뷰 엔진 팀에 의해 여전히 해결되고 있습니까? 아니면 기본 개념이 누락 되었습니까?


3
주제 외에 죄송하지만 파일 이름 옆에있는 아이콘은 무엇입니까? :) 어떤 종류의 소스 제어권?
Alex

6
@jitbit : VisualSVN
erict

답변:


237

당신이 경우 return PartialView()귀하의 컨트롤러에서 (대신 return View()), 다음 _viewstart.cshtml실행되지 않습니다.


6
아하, PartialViewResult수업 에 대해 몰랐다 . 그것이 내가 필요한 것입니다.
포트만

6
후속으로, 나는 내가해야 할 것으로 나타났습니다 또한 명시 적으로 액션 메소드의 반환 유형을 설정 PartialViewResult일반적인 대신 ActionResult.
포트만

2
@Portman 액션 메소드의 반환 유형이 아닌 경우 문제가 발생 ActionResult합니까? 이 경우 MVC 런타임이 다르게 행동해서는 안되기 때문에 이것이 문제라는 것에 놀랐습니다 (즉, 액션 메소드가 반환하는 유형 ActionResult또는 파생 된 클래스가 작동하는 한).
marcind

@marcind 반환 유형을로 설정하면 w3wp.exe에서 스택 오버플로가 발생합니다 ActionResult. 반환 유형이 인 경우 제대로 작동합니다 PartialViewResult. Connect 버그를 제기해야한다고 생각하십니까?
포트만

나에게 하나의 소리가 들립니다-당신이 Connect 버그를 제출하면 소리 질러 투표하십시오.
Dav
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.