다음을 통해 공유


보기 마스터 페이지를 사용하여 페이지 레이아웃 만들기(C#)

작성자: Microsoft

PDF 다운로드

이 자습서에서는 보기 master 페이지를 활용하여 애플리케이션의 여러 페이지에 대한 공통 페이지 레이아웃을 만드는 방법을 알아봅니다. 예를 들어 보기 master 페이지를 사용하여 2열 페이지 레이아웃을 정의하고 웹 애플리케이션의 모든 페이지에 대해 2열 레이아웃을 사용할 수 있습니다.

보기 마스터 페이지를 사용하여 페이지 레이아웃 만들기

이 자습서에서는 보기 master 페이지를 활용하여 애플리케이션의 여러 페이지에 대한 공통 페이지 레이아웃을 만드는 방법을 알아봅니다. 예를 들어 보기 master 페이지를 사용하여 2열 페이지 레이아웃을 정의하고 웹 애플리케이션의 모든 페이지에 대해 2열 레이아웃을 사용할 수 있습니다.

보기 master 페이지를 활용하여 애플리케이션의 여러 페이지에서 공통 콘텐츠를 공유할 수도 있습니다. 예를 들어 웹 사이트 로고, 탐색 링크 및 배너 광고를 보기 master 페이지에 배치할 수 있습니다. 이렇게 하면 애플리케이션의 모든 페이지에 이 콘텐츠가 자동으로 표시됩니다.

이 자습서에서는 새 보기 master 페이지를 만들고 master 페이지를 기반으로 새 보기 콘텐츠 페이지를 만드는 방법을 알아봅니다.

보기 마스터 페이지 만들기

먼저 2열 레이아웃을 정의하는 보기 master 페이지를 만들어 보겠습니다. Views\Shared 폴더를 마우스 오른쪽 단추로 클릭하고 메뉴 옵션 추가, 새 항목을 선택하고 MVC 보기 마스터 페이지 템플릿을 선택하여 MVC 프로젝트에 새 보기 master 페이지를 추가합니다(그림 1 참조).

보기 master 페이지 추가

그림 01: 보기 master 페이지 추가(전체 크기 이미지를 보려면 클릭)

애플리케이션에서 둘 이상의 보기 master 페이지를 만들 수 있습니다. 각 보기 master 페이지는 다른 페이지 레이아웃을 정의할 수 있습니다. 예를 들어 특정 페이지에는 2열 레이아웃이 있고 다른 페이지에는 3열 레이아웃이 포함될 수 있습니다.

보기 master 페이지는 표준 ASP.NET MVC 보기와 매우 유사합니다. 그러나 일반 보기와 달리 보기 master 페이지에는 하나 이상의 <asp:ContentPlaceHolder> 태그가 포함됩니다. 태그는 <contentplaceholder> 개별 콘텐츠 페이지에서 재정의할 수 있는 master 페이지의 영역을 표시하는 데 사용됩니다.

예를 들어 목록 1의 보기 master 페이지는 2열 레이아웃을 정의합니다. 여기에는 두 개의 <contentplaceholder> 태그가 포함되어 있습니다. 각 열에 대해 하나씩 <ContentPlaceHolder> .

목록 1 – Views\Shared\Site.master

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.Master.cs" Inherits="MvcApplication1.Views.Shared.Main" %>
<!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 id="Head1" runat="server">
     <title></title>

     <style type="text/css">

     html
     {
           background-color:gray;
     }

     .column
     {
          float:left;
          width:300px;
          border:solid 1px black;
          margin-right:10px;
          padding:5px;
          background-color:white;

          min-height:500px;
     }

     </style>

     <asp:ContentPlaceHolder ID="head" runat="server">
     </asp:ContentPlaceHolder>
</head>
<body>

     <h1>My Website</h1>

     <div class="column">
          <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
          </asp:ContentPlaceHolder>
     </div>
     <div class="column">
          <asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">
          </asp:ContentPlaceHolder>
     </div>

</body>
</html>

목록 1의 보기 master 페이지의 본문에는 두 열에 해당하는 두 개의 <div> 태그가 포함되어 있습니다. Cascading Style Sheet 열 클래스는 두 태그 모두 <div> 에 적용됩니다. 이 클래스는 master 페이지의 맨 위에 선언된 스타일시트에 정의됩니다. 디자인 보기로 전환하여 보기 master 페이지를 렌더링하는 방법을 미리 볼 수 있습니다. 소스 코드 편집기의 왼쪽 아래에 있는 디자인 탭을 클릭합니다(그림 2 참조).

디자이너에서 master 페이지 미리 보기

그림 02: 디자이너에서 master 페이지 미리 보기(전체 크기 이미지를 보려면 클릭)

콘텐츠 보기 페이지 만들기

보기 master 페이지를 만든 후 보기 master 페이지를 기반으로 하나 이상의 보기 콘텐츠 페이지를 만들 수 있습니다. 예를 들어 Views\Home 폴더를 마우스 오른쪽 단추로 클릭하고 , 추가, 새 항목을 선택하고,MVC 콘텐츠 페이지 보기 템플릿을 선택하고, Index.aspx라는 이름을 입력하고, 추가 단추를 클릭하여 홈 컨트롤러에 대한 인덱스 보기 콘텐츠 페이지를 만들 수 있습니다(그림 3 참조).

보기 콘텐츠 페이지 추가

그림 03: 보기 콘텐츠 페이지 추가(전체 크기 이미지를 보려면 클릭)

추가 단추를 클릭하면 보기 콘텐츠 페이지와 연결할 보기 master 페이지를 선택할 수 있는 새 대화 상자가 나타납니다(그림 4 참조). 사이트로 이동할 수 있습니다. master 이전 섹션에서 만든 master 페이지를 봅니다.

master 페이지 선택

그림 04: master 페이지 선택(전체 크기 이미지를 보려면 클릭)

사이트를 기반으로 새 보기 콘텐츠 페이지를 만든 후 master master 페이지에서는 목록 2에서 파일을 가져옵니다.

목록 2 – Views\Home\Index.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MvcApplication1.Views.Home.Index" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
</asp:Content>

이 보기에는 보기 master 페이지의 각 <asp:ContentPlaceHolder> 태그에 해당하는 태그가 포함되어 <asp:Content> 있습니다. 각 <asp:Content> 태그에는 재정의하는 특정 <asp:ContentPlaceHolder> 을 가리키는 ContentPlaceHolderID 특성이 포함되어 있습니다.

또한 목록 2의 콘텐츠 보기 페이지에는 일반적인 여는 HTML 태그와 닫는 HTML 태그가 포함되어 있지 않습니다. 예를 들어 열기 및 닫기 <html> 또는 <head> 태그를 포함하지 않습니다. 모든 일반 열기 및 닫는 태그는 보기 master 페이지에 포함됩니다.

보기 콘텐츠 페이지에 표시하려는 모든 콘텐츠는 태그 내에 <asp:Content> 배치해야 합니다. 이러한 태그 외부에 HTML 또는 기타 콘텐츠를 배치하면 페이지를 보려고 할 때 오류가 발생합니다.

콘텐츠 보기 페이지의 master 페이지에서 모든 <asp:ContentPlaceHolder> 태그를 재정의할 필요는 없습니다. 태그를 특정 콘텐츠로 <asp:ContentPlaceHolder> 바꾸려는 경우에만 태그를 재정의해야 합니다.

예를 들어 목록 3의 수정된 인덱스 보기에는 두 개의 <asp:Content> 태그만 포함됩니다. 각 태그에는 <asp:Content> 일부 텍스트가 포함됩니다.

목록 3 – Views\Home\Index.aspx (modified)

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MvcApplication1.Views.Home.Index" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

     <h1>Content in first column!</h1>

</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">

     <h1>Content in second column!</h1>

</asp:Content>

목록 3의 보기가 요청되면 그림 5에서 페이지를 렌더링합니다. 보기는 두 개의 열이 있는 페이지를 렌더링합니다. 또한 보기 콘텐츠 페이지의 콘텐츠가 보기 master 페이지의 콘텐츠와 병합됩니다.

인덱스 보기 콘텐츠 페이지

그림 05: 인덱스 보기 콘텐츠 페이지(전체 크기 이미지를 보려면 클릭)

마스터 페이지 콘텐츠 보기 수정

보기 master 페이지로 작업할 때 거의 즉시 발생하는 한 가지 문제는 다른 보기 콘텐츠 페이지가 요청될 때 보기 master 페이지 콘텐츠를 수정하는 문제입니다. 예를 들어 웹 애플리케이션의 각 페이지에 고유한 제목이 있어야 합니다. 그러나 제목은 보기 콘텐츠 페이지가 아닌 보기 master 페이지에서 선언됩니다. 그렇다면 각 보기 콘텐츠 페이지의 페이지 제목을 사용자 지정하려면 어떻게 해야 할까요?

보기 콘텐츠 페이지에 표시되는 제목을 수정하는 방법에는 두 가지가 있습니다. 먼저 보기 콘텐츠 페이지의 맨 위에 선언된 지시문의 <%@ page %> 제목 특성에 페이지 제목을 할당할 수 있습니다. 예를 들어 페이지 제목 "Super Great Website"를 인덱스 보기에 할당하려는 경우 인덱스 보기의 맨 위에 다음 지시문을 포함할 수 있습니다.

<%@ page title="Super Great Website" language="C#" masterpagefile="~/Views/Shared/Site.Master"
            autoeventwireup="true" codebehind="Index.aspx.cs" inherits="MvcApplication1.Views.Home.Index"%>

인덱스 보기가 브라우저에 렌더링되면 원하는 제목이 브라우저 제목 표시줄에 표시됩니다.

브라우저 제목 표시줄

타이틀 특성이 작동하려면 master 보기 페이지가 충족되어야 하는 한 가지 중요한 요구 사항이 있습니다. 보기 master 페이지에는 헤더에 <head runat="server"> 대한 일반 <head> 태그 대신 태그가 포함되어야 합니다. 태그에 <head> runat="server" 특성이 포함되어 있지 않으면 제목이 표시되지 않습니다. 기본 보기 master 페이지에는 필수 <head runat="server"> 태그가 포함됩니다.

개별 보기 콘텐츠 페이지에서 master 페이지 콘텐츠를 수정하는 다른 방법은 태그에서 <asp:ContentPlaceHolder> 수정하려는 지역을 래핑하는 것입니다. 예를 들어 제목뿐만 아니라 master 보기 페이지에서 렌더링된 메타 태그도 변경하려는 경우를 생각해 보세요. 목록 4의 master 보기 페이지에는 태그 내에 태그가 <asp:ContentPlaceHolder><head> 포함되어 있습니다.

목록 4 – Views\Shared\Site2.master

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site2.Master.cs" Inherits="MvcApplication1.Views.Shared.Site2" %>
<!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>

     <asp:ContentPlaceHolder ID="head" runat="server">
          <title>Please change my title</title>
          <meta name="description" content="Please provide a description" />
          <meta name="keywords" content="keyword1,keyword2" />
     </asp:ContentPlaceHolder>
</head>
<body>
     <div>

          <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

          </asp:ContentPlaceHolder>
     </div>
</body>
</html>

목록 4의 <asp:ContentPlaceHolder> 태그에는 기본 콘텐츠인 기본 제목 및 기본 메타 태그가 포함됩니다. 개별 보기 콘텐츠 페이지에서 이 <asp:ContentPlaceHolder> 태그를 재정의하지 않으면 기본 콘텐츠가 표시됩니다.

목록 5의 콘텐츠 보기 페이지는 사용자 지정 제목 및 사용자 지정 메타 태그를 표시하기 위해 태그를 재정 <asp:ContentPlaceHolder> 의합니다.

목록 5 – Views\Home\Index2.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site2.Master" AutoEventWireup="true" CodeBehind="Index2.aspx.cs" Inherits="MvcApplication1.Views.Home.Index2" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
     <title>The Index2 Page</title>
     <meta name="description" content="Description of Index2 page" />
     <meta name="keywords" content="asp.net,mvc,cool,groovy" />    
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

     Just some content in the body of the page.

</asp:Content>

요약

이 자습서에서는 master 페이지를 보고 콘텐츠 페이지를 보는 기본 소개를 제공했습니다. 새 보기 master 페이지를 만들고 이를 기반으로 콘텐츠 보기 페이지를 만드는 방법을 알아보았습니다. 또한 특정 보기 콘텐츠 페이지에서 보기 master 페이지의 콘텐츠를 수정하는 방법도 검토했습니다.