Microsoft MVP성태의 닷넷 이야기
오류 유형: 124. MVC 프로젝트의 Site.Master 관련 오류 정리 [링크 복사], [링크+제목 복사],
조회: 25425
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

MVC 프로젝트의 Site.Master 관련 오류 정리

미리 말씀드리면, 여기서 나열하는 오류 상황은 Visual Studio에서 MVC 프로젝트를 생성할 때 기본적으로 추가되어 있는 Site.Master를 사용하는 경우에는 발생하지 않습니다.

처음에 Site.Master 페이지 없이 진행하려고 생성되어 있던 파일을 삭제한 후, 다시 "Add" / "New Item"으로 "Master Page"를 선택한 경우에 문제가 발생하게 됩니다.

우선, 그렇게 해서 기본 생성되는 Site.Master 파일이 담고 있는 코드는 다음과 같습니다.

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="MvcApplication1.Views.Shared.Site" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

이 상태에서 본문에 (TestController 클래스가 추가되었다고 가정하고) <% Html.RenderAction("Index", "Test"); %>을 추가하고 실행하면 다음과 같은 오류가 발생합니다.

aspnet_sitermaster_conflict_1.png

"
The name 'Html' does not exist in the current context
"


이것은 기본 생성된 Site.Master의 상속이 잘 못 되어 있기 때문이어서 다음과 같이 변경해 주면 해결됩니다.

기존: <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="MvcApplication1.Views.Shared.Site" %>

수정: <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

이 때문에 Site.master.cs 파일이 더 이상 필요 없으므로 솔루션 탐색기에서 Site.Master 하위에 있는 2개의 파일(Site.Master.cs, Site.Master.designer.cs)을 삭제합니다. 가끔 이상하게도, 쓸모없긴 하지만 있어도 무방한 그 2개의 파일을 그대로 두는 경우 다음과 같은 오류가 발생하기도 합니다.

The type 'System.Web.Mvc.ViewMasterPage' is ambiguous





Inherits 속성 값을 조정해 줌으로써 Html.RenderAction 오류는 사라지는데, 자잘한 오류가 아직 하나 더 남아 있습니다. 실행해 보면 여전히 다음과 같은 오류가 발생합니다.

Cannot find ContentPlaceHolder 'MainContent' in the master page '/Views/Shared/Site.Master', verify content control's ContentPlaceHolderID attribute in the content page.


괜히 삭제해서... ^^; 맞춰주어야 할 것이 많습니다. 이 오류를 해결하기 위해 본문에 포함된 2개의 ContentPlaceHolder의 ID도 역시 다음과 같이 변경해 주어야 합니다.

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <asp:ContentPlaceHolder ID="TitleContent" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>

 <% Html.RenderAction("Index", "Test"); %> 

        <asp:ContentPlaceHolder ID="MainContent" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

참고로, 위와 같은 문제를 겪지 않으려면, "Add New Item" 대화상자에서 "Master Page"가 아닌 "MVC 2 View Master Page"를 선택해 주면 됩니다.





[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 8/7/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13843정성태12/13/20244396오류 유형: 938. Docker container 내에서 빌드 시 error MSB3021: Unable to copy file "..." to "...". Access to the path '...' is denied.
13842정성태12/12/20244545디버깅 기술: 205. Windbg - KPCR, KPRCB
13841정성태12/11/20244869오류 유형: 937. error MSB4044: The "ValidateValidArchitecture" task was not given a value for the required parameter "RemoteTarget"
13840정성태12/11/20244453오류 유형: 936. msbuild - Your project file doesn't list 'win' as a "RuntimeIdentifier"
13839정성태12/11/20244893오류 유형: 936. msbuild - error CS1617: Invalid option '12.0' for /langversion. Use '/langversion:?' to list supported values.
13838정성태12/4/20244610오류 유형: 935. Windbg - Breakpoint 0's offset expression evaluation failed.
13837정성태12/3/20245091디버깅 기술: 204. Windbg - 윈도우 핸들 테이블 (3) - Windows 10 이상인 경우
13836정성태12/3/20244637디버깅 기술: 203. Windbg - x64 가상 주소를 물리 주소로 변환 (페이지 크기가 2MB인 경우)
13835정성태12/2/20245087오류 유형: 934. Azure - rm: cannot remove '...': Directory not empty
13834정성태11/29/20245351Windows: 275. C# - CUI 애플리케이션과 Console 윈도우 (Windows 10 미만의 Classic Console 모드인 경우) [1]파일 다운로드1
13833정성태11/29/20244999개발 환경 구성: 737. Azure Web App에서 Scale-out으로 늘어난 리눅스 인스턴스에 SSH 접속하는 방법
13832정성태11/27/20244949Windows: 274. Windows 7부터 도입한 conhost.exe
13831정성태11/27/20244400Linux: 111. eBPF - BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_MAP_TYPE_RINGBUF에 대한 다양한 용어들
13830정성태11/25/20245245개발 환경 구성: 736. 파이썬 웹 앱을 Azure App Service에 배포하기
13829정성태11/25/20245201스크립트: 67. 파이썬 - Windows 버전에서 함께 설치되는 py.exe
13828정성태11/25/20244453개발 환경 구성: 735. Azure - 압축 파일을 이용한 web app 배포 시 디렉터리 구분이 안 되는 문제파일 다운로드1
13827정성태11/25/20245122Windows: 273. Windows 환경의 파일 압축 방법 (tar, Compress-Archive)
13826정성태11/21/20245365닷넷: 2313. C# - (비밀번호 등의) Console로부터 입력받을 때 문자열 출력 숨기기(echo 끄기)파일 다운로드1
13825정성태11/21/20245688Linux: 110. eBPF / bpf2go - BPF_RINGBUF_OUTPUT / BPF_MAP_TYPE_RINGBUF 사용법
13824정성태11/20/20244756Linux: 109. eBPF / bpf2go - BPF_PERF_OUTPUT / BPF_MAP_TYPE_PERF_EVENT_ARRAY 사용법
13823정성태11/20/20245314개발 환경 구성: 734. Ubuntu에 docker, kubernetes (k3s) 설치
13822정성태11/20/20245197개발 환경 구성: 733. Windbg - VirtualBox VM의 커널 디버거 연결 시 COM 포트가 없는 경우
13821정성태11/18/20245112Linux: 108. Linux와 Windows의 프로세스/스레드 ID 관리 방식
13820정성태11/18/20245269VS.NET IDE: 195. Visual C++ - C# 프로젝트처럼 CopyToOutputDirectory 항목을 추가하는 방법
13819정성태11/15/20244506Linux: 107. eBPF - libbpf CO-RE의 CONFIG_DEBUG_INFO_BTF 빌드 여부에 대한 의존성
13818정성태11/15/20245325Windows: 272. Windows 11 24H2 - sudo 추가
1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...