기본 ASP.NET MVC 3 프로젝트에서 레이아웃 및 부분 cshtml 파일은 밑줄로 시작합니다
_viewstart
_Layout
_LogOnPartial
이 관습이 왜 필요한가? 이 컨벤션을 따라야합니까?
프레임 워크 .cshtml
가 밑줄로 시작 하는 파일에 특별한 의미를 부여합니까 ?
기본 ASP.NET MVC 3 프로젝트에서 레이아웃 및 부분 cshtml 파일은 밑줄로 시작합니다
_viewstart
_Layout
_LogOnPartial
이 관습이 왜 필요한가? 이 컨벤션을 따라야합니까?
프레임 워크 .cshtml
가 밑줄로 시작 하는 파일에 특별한 의미를 부여합니까 ?
답변:
Razor는 ASP.NET 웹 페이지 (WebMatrix)를 위해 개발되었으며, MVC에서 얻을 수있는보기 폴더 및 라우팅과 같은 종류의 보호 기능이 없습니다. 웹 페이지의 레이아웃 페이지는 직접 제공되지 않으므로 밑줄이 앞에 붙습니다. 또한 웹 페이지 프레임 워크는 이름에 밑줄이있는 파일이 직접 요청되지 않도록 구성되었습니다. 웹 페이지 내의 다른 .cshtml 파일은 일반적으로 찾아 볼 수 있어야합니다. .asp 또는 .php 파일과 동일합니다.
ASP.NET 팀은 Web Pages가 ASP.NET 개발의 출발점이라고 말하면서 MVC 로의 마이그레이션을 제 시간에 맞춰야합니다. 그 중 일부는 웹 페이지에서 MVC로 마이그레이션하는 것이 쉬워야한다는 것을 의미합니다. 결과적으로 웹 페이지 내에 설정된 이름 지정 규칙을 MVC Razor 파일로 전달하는 것이 좋습니다.
그래서이 있다 밑줄로 파일 이름을 접두어에 대한 기술적 인 이유는 - 그것은 단지 MVC와 관련이 없습니다.
[업데이트 2018 년 10 월]
새로운 ASP.NET Core Razor Pages 프레임 워크 (버전 2.1 제외)에서 시작시에 밑줄이있는 파일은 @page
지시문 이있는 경우에도 경로가 생성 될 때 무시됩니다 (일반적으로 라우팅 가능한 Razor 페이지가 됨) . 그렇기 때문에 Razor Pages 응용 프로그램에서 레이아웃과 부분 파일의 이름을 밑줄로 표시하는 것이 좋습니다.
이것이 Ruby on Rails가하는 방식입니다 (부분은 _로 시작하지만 렌더 부분 호출에는 _이 포함되지 않음). ASP.net MVC는 그로부터 많은 영감을 얻었습니다.
기술적 인 이유는 없습니다. 단지 6 개월 후에 다른 개발자들에게 자신의 의도를 명확하게 보여주기위한 협약 일뿐입니다. 이것은 부분적인 견해입니다.
System.Web.HttpNotFoundHandler
.
브라우저의 직접 요청으로 표시 할 수없는 페이지 (마스터 페이지, 부분보기 등)는 이름 앞에 밑줄 (_)이 있습니다.
따라서 _Layout.cshtml (이것은 마스터 페이지 임)에 요청하려고하면 서버에서 오류가 발생합니다.
Razor보기 엔진에서 독립형 페이지로 탐색 할 수없는 파일을 구별하는 방법입니다.
MVC 2에서는이 방법을 생각해보십시오 ... 부분보기와 마스터 사이트를 접미사 .master, .ascx로 구별하고 일반 페이지는 .aspx입니다. 반면 Razor보기에서는 ... 모든 뷰는 .cshtml이므로 부분 페이지와 마스터 페이지를 구분하기 위해 접두사 (_)를 갖습니다. 필수는 아니며 "컨벤션"입니다.
MVC를 사용하지는 않지만 면도기 구문을 사용하는 웹 페이지에서는 _ 접두사가 일반적으로 사용자가 페이지를 액세스하지 않고 다른 페이지 또는 일부 코드로 페이지에 액세스하도록되어 있습니다. _prefix가 포함 된 페이지로 이동하려고하면 asp.net이 해당 페이지에 액세스하지 못하게합니다. 그렇기 때문에 사용자가 직접 레이아웃 페이지와 다른 페이지에 액세스해서는 안되기 때문에 레이아웃 페이지와 다른 페이지와 함께 사용됩니다.
asp.net의 App_Code 폴더와 같은 것
/view
기본 ASP.NET MVC 프로젝트; /views/web.config
파일을 방지하기 위해 설정됩니다. 그러나 컨트롤러 작업이 반환되는 것을 막을 방법은 없습니다. 제대로 View("_Index", model);
작동합니다. 방금 뷰 이름을 _Index.cshtml로 변경하고 위에서 한 것처럼 호출하도록 작업을 변경하여 방금했습니다.