* 마스터 페이지는 "공통적인 레이아웃 적용관련"페이지이다.
  마스터페이지에서 "ContentPlaceHolder부분만" 바뀌는 부분이다.
  마스터페이지의 확장자는 "*.master"이다.
  마스터페이지에서 "FindControl"이라는 컨트롤로 동적으로"서버컨트롤"에 접근하도록 해준   다. 



--> "새로 만들기"에서 "웹 사이트" 추가로 아래 그림과 같이 만든다.




--> 파일저장 위치를 정하고 이름 지정 후(여기서 프로젝트명은 "WebMasterPage"라고 정하였다.) '확인'버튼 클릭한다.





--> 생성된 "WebMasterPage"프로젝트에서 "Navigator.ascx"라는 이름으로 "웹 사용자 정의 컨트롤"을 하나만들고 아래와 같이 코드를 입력한다.


--> "솔루션 탐색기"에 "Navigator.ascx"파일이 만들어졌다.






==> [Navigator.ascx] 소스코드 및 디자인


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Navigator.ascx.cs" Inherits="Navigator" %>

<div>

    <a href="Default.aspx">HOME</a>

    |

    <a href="About.aspx">About</a>

</div>










--> 그 다음에는 "WebMasterPage"프로젝트에서 "마스터  페이지"를 만들기 위한 과정으로 아래그림과 같은 순서로 "마스터 페이지"를 생성한다.




--> "마스터 페이지"형식으로 선택하고 이름은 기본적으로 나오는 MasterPage.master 그대로 지정하고 '추가'버튼 클릭한다.



--> "솔루션 탐색기"에 "MasterPage.master"파일이 생성되었다.




--> "MasterPage.master"파일에 코드작성 및 디자인하기.



==> [MasterPage.master] 소스 및 디자인


<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

 

<%@ Register src="Navigator.ascx" tagname="Navigator" tagprefix="uc1" %>

 

<!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>

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

    </asp:ContentPlaceHolder>

    <style type="text/css">

        .style1

        {

            width: 120px;

            height: 187px;

            background-color:Yellow;

        }

        .style2

        {

            height: 187px;

        }

    </style>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <table border="1" width="100%">

            <tr>

                <td colspan="2">

                    <uc1:Navigator ID="Navigator1" runat="server" />

                </td>

            </tr>

            <tr>

                <td class="style1">

                    <asp:Label ID="lblDisplay" runat="server" Text=""></asp:Label>

                    <br />

                    카테

                </td>

                <td class="style2" style="vertical-align:top;">

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

                    </asp:ContentPlaceHolder>

                </td>

            </tr>

            <tr>

                <td colspan="2">

                    Copyright ASP.NET All right reserved</td>

            </tr>

        </table>

    </div>

    </form>

</body>

</html>

 

 

 

 

<!-- 마스터페이지(마스터페이지에서 ContentPlaceHolder부분만)만 변하는 부분이고, 다른 부분은 변하지 않는다 -->

<!-- 마스터페이지는 공통적인 레이아웃 적용관련 페이지이다. -->

<!-- "마스터페이지"에서 "ContentPlaceHolder부분만" 바뀌는 부분이다. -->

 

 











--> "마스터 페이지(파일)"인 "MasterPage.master"의 '공통적인 레이아웃 적용'을 실습해보기 위해 "웹 폼(Web Form)"형태의 "About.aspx"파일을 아래그림과 같이 생성한다.


--> "마스터 페이지 선택"체크박스에 체크하고 '추가'버튼을 클릭한다.(그 이유는 "마스터 페이지"인 "MasterPage.master"의 '공통적인 레이아웃 적용'을 하기 위해서이다.)




--> 아래그림의 오른쪽에 빨간색으로 표시한 부분의 "MasterPage.master"를 마우스로 선택한 후 '확인'버튼 클릭한다.("MasterPage.master"를 마우스로 선택해야 "MasterPage.master"의 '공통적인 레이아웃 적용'을 할 수 있다.)





--> 아래그림의 "솔루션 탐색기"에 "About.aspx"파일이 생성되었다.




--> 생성된 "About.aspx"소스코드에 아래와 같이 입력한다.


==> [About.aspx] 소스코드 및 디자인


<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="About.aspx.cs" Inherits="About" %>

 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

    <p>

    여기는 소개 페이지입니다.</p>

</asp:Content>

 

 






--> 위에서 [About.aspx] 소스코드를 작성 후 [About.aspx.cs]소스코드에서는 "동적으로 부모(마스터페이지)의 특정 컨트롤에 접근하는 방법"을 사용하기위한 코드를 작성한다.



==> [About.aspx.cs]


using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

public partial class About : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        Label lbl = ((Label)Master.FindControl("lblDisplay"));

        lbl.Text = "소개페이지";

    }

}

 




--> [Default.aspx]에서도 소스코드를 작성하고 [Default.aspx.cs]코드에서도 역시 "동적으로 부모(마스터페이지)의 특정 컨트롤에 접근하는 방법"을 사용하기위한 코드를 작성한다.




==> [Default.aspx] 소스코드 및 디자인


<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

 

    <p>

    여기는 메인 페이지입니다.</p>

 

</asp:Content>

 

 







==> [Default.aspx.cs]


using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        // 동적으로 부모(마스터페이지)의 특정 컨트롤에 접근하는 방법

        ((Label)Master.FindControl("lblDisplay")).Text = "메인";

    }

}

 






[실행결과]

--> 웹 페이지 첫 실행화면(= "Default.aspx"페이지). 위의 "[Default.aspx] 디자인" 그림에서 노란색바탕의 "WebUserControl"안에 있는 레이블인 "lblDisplay"에 '웹 페이지 로드'시에 동적으로 "메인"이라는 텍스트가 출력된다.




--> "About.aspx"페이지. 바로위의그림인 [Default.aspx]페이지에서 "Navigator.ascx"부분의 링크가 걸려있는 "About"이라는 '텍스트'를 누르면 아래그림처럼 "About.aspx" 웹 페이지가 열린다. 여기서도 노란색바탕의 "WebUserControl"안에 있는 레이블인 "lblDisplay"에 '웹 페이지 로드'시에 동적으로 "소개페이지"이라는 텍스트가 출력된다.









Posted by holland14
: