“Medcare” template을 이용한 MVC Web Application 구축, 다섯 번째 입니다. 지난 4편에서는 각 메뉴의 기본적인 뼈대인 Controller와 해당 controller 의 index ActionMethod 에 대응하는index.cshtml
View 파일을 만드는 과정을 살펴봤습니다. 이제 웹사이트의 기본적인 구조를 갖추었으니, 이번 편에서는 모든 페이지에 공통으로 적용될 Layout 을 template 에서 어떻게 가져와서 _Layout.cshtml 파일을 구성하는지 살펴보겠습니다.
1. 공통 부분 :
MVC Web Application에서는 일반적으로 _Layout.cshtml
이라는 파일을 사용하여 웹사이트의 공통 Layout 을 정의합니다. 이 파일은 Web page의 전체적인 구조를 담고 있으며, 각 페이지의 내용이 삽입될 영역을 지정하는 역할을 합니다. 필요에 따라서 여러 Layout page 를 만들어 놓고 각 View 마다 다르게 설정할 수도 있습니다.
Views
폴더 아래Shared
폴더를 확인하거나 없다면 생성합니다.Shared
폴더에 Razor View Page (_Layout.cshtml
)를 확인합니다. 없으면 생성합니다.
제가 생성한 Project 에는 이미 Shared 폴더에 _Layout.cshtml 파일이 있으므로 더블클릭으로 파일을 엽니다.
크게 head tag 와 body tag 로 나뉘고, 다시 body tag 내에는 header, div, footer 이렇게 세부분으로 나뉩니다. 이 부분이 핵심입니다.
이 번에는 “Medcare” 의 HTML Source 를 살펴보겠습니다.
Source 를 편하게 보기 위해서 Visual Studio Code 로 열어서 보겠습니다. Download 받아 압축을 푼 폴더를 마우스 오른쪽 클릭을 하면 나타나는 Context menu 에서 “Code(으)로 열기” 메뉴를 클릭합니다.


페이지 내용은 아래와 같습니다.

어떻습니까? 구조가 익숙하죠?
다시 Visual Studio 2022 의 모습을 보죠.

Department.html
모두 같은 구조를 가지고 있습니다.
사각형의 내의 Source 내용을 제외한 부분들이 거의 대부분 동일하다는 말은 WebSite 에서 공통적으로 사용할 _Layout.cshtml 에 넣으면 모든 Page 에서 재 사용할 수 있다는 의미입니다. 그리고 Source 적용 후에 header 와 footer 를 별도의 코드로 분리하여 관리할 수 있습니다.
2. 각 화면의 영역 :
이제 공통 부분을 찾았으니 차이가 나는 각 화면의 부분을 어떻게 적용하는지에 대해서 살펴보겠습니다.
html source 에서 사각형의 내용들을 어떻게 처리하느냐를 이야기하는 건데요. Rendering 된다라고 이야기합니다.
_Layout.cshtml
파일에서 각 페이지의 내용이 Rendering될 위치를 지정해야 합니다. 이는 @RenderBody()
라는 Helper Method를 사용하여 간단하게 처리할 수 있습니다. 이 Method는 각 View page의 HTML 콘텐츠를 해당 위치에 삽입해 줍니다.
아래 처럼 _Layout.cshtml 파일을 보면 사각형 내의 @RenderBody() 를 보실 수 있습니다.
<body>
<header>
</header>
<strong><div class="container">
@RenderBody()
</div></strong>
<footer>
</footer>
</body>
3. _Layout.cshtml(공통 레이아웃) 파일:
위 내용을 바탕으로 _Layout.cshtml 파일을 수정해 보도록 하겠습니다. 여러 html page 중에서 어떤 파일을 선택해도 좋지만 제일 간단하다고 생각되는 about-us.html 파일을 가지고 진행하겠습니다.

<div class="container">
@RenderBody()
</div>
그럼 아래와 같습니다.
- doctype html>
- <html lang=”en”>
- <head>
- <meta charset=”utf-8″>
- <meta name=”viewport” content=”width=device-width, initial-scale=1, shrink-to-fit=no”>
- <link rel=”icon” href=”img/favicon.png” type=”image/png”>
- <title>Medcare Medicaltitle>
- <link rel=”stylesheet” href=”css/bootstrap.css”>
- <link rel=”stylesheet” href=”css/themify-icons.css”>
- <link rel=”stylesheet” href=”css/flaticon.css”>
- <link rel=”stylesheet” href=”vendors/fontawesome/css/all.min.css”>
- <link rel=”stylesheet” href=”vendors/owl-carousel/owl.carousel.min.css”>
- <link rel=”stylesheet” href=”vendors/animate-css/animate.css”>
- <link rel=”stylesheet” href=”css/style.css”>
- <link rel=”stylesheet” href=”css/responsive.css”>
- head>
- <body>
- <header class=”header_area”>
- <div class=”top_menu row m0″>
- <div class=”container”>
- <div class=”float-left”>
- <a class=”dn_btn” href=”mailto:medical@example.com”><i class=”ti-email”>i>medical@example.coma>
- <span class=”dn_btn”> <i class=”ti-location-pin”>i>Find our Locationspan>
- div>
- <div class=”float-right”>
- <ul class=”list header_social”>
- <li><a href=”#”><i class=”ti-facebook”>i>a>li>
- <li><a href=”#”><i class=”ti-twitter-alt”>i>a>li>
- <li><a href=”#”><i class=”ti-linkedin”>i>a>li>
- <li><a href=”#”><i class=”ti-skype”>i>a>li>
- <li><a href=”#”><i class=”ti-vimeo-alt”>i>a>li>
- ul>
- div>
- div>
- div>
- <div class=”main_menu”>
- <nav class=”navbar navbar-expand-lg navbar-light”>
- <div class=”container”>
- <a class=”navbar-brand logo_h” href=”index.html”><img src=”img/logo.png” alt=””>a>
- <button class=”navbar-toggler” type=”button” data-toggle=”collapse” data-target=”#navbarSupportedContent” aria-controls=”navbarSupportedContent” aria-expanded=”false” aria-label=”Toggle navigation”>
- <span class=”icon-bar”>span>
- <span class=”icon-bar”>span>
- <span class=”icon-bar”>span>
- button>
- <div class=”collapse navbar-collapse offset” id=”navbarSupportedContent”>
- <ul class=”nav navbar-nav menu_nav ml-auto”>
- <li class=”nav-item”><a class=”nav-link” href=”index.html”>Homea>li>
- <li class=”nav-item”><a class=”nav-link” href=”about-us.html”>Abouta>li>
- <li class=”nav-item”><a class=”nav-link” href=”department.html”>Departmenta>li>
- <li class=”nav-item”><a class=”nav-link” href=”doctors.html”>Doctorsa>li>
- <li class=”nav-item submenu dropdown”>
- <a href=”#” class=”nav-link dropdown-toggle” data-toggle=”dropdown” role=”button” aria-haspopup=”true” aria-expanded=”false”>Bloga>
- <ul class=”dropdown-menu”>
- <li class=”nav-item”><a class=”nav-link” href=”blog.html”>Bloga>li>
- <li class=”nav-item”><a class=”nav-link” href=”single-blog.html”>Blog Detailsa>li>
- <li class=”nav-item”><a class=”nav-link” href=”element.html”>elementa>li>
- ul>
- li>
- <li class=”nav-item”><a class=”nav-link” href=”contact.html”>Contacta>li>
- ul>
- div>
- div>
- nav>
- div>
- header>
- <div class=”container”>
- @RenderBody()
- div>
- <footer class=”footer-area area-padding-top”>
- <div class=”container”>
- <div class=”row”>
- <div class=”col-lg-2 col-sm-6 single-footer-widget”>
- <h4>Top Productsh4>
- <ul>
- <li><a href=”#”>Managed Websitea>li>
- <li><a href=”#”>Manage Reputationa>li>
- <li><a href=”#”>Power Toolsa>li>
- <li><a href=”#”>Marketing Servicea>li>
- ul>
- div>
- <div class=”col-lg-2 col-sm-6 single-footer-widget”>
- <h4>Quick Linksh4>
- <ul>
- <li><a href=”#”>Jobsa>li>
- <li><a href=”#”>Brand Assetsa>li>
- <li><a href=”#”>Investor Relationsa>li>
- <li><a href=”#”>Terms of Servicea>li>
- ul>
- div>
- <div class=”col-lg-2 col-sm-6 single-footer-widget”>
- <h4>Featuresh4>
- <ul>
- <li><a href=”#”>Jobsa>li>
- <li><a href=”#”>Brand Assetsa>li>
- <li><a href=”#”>Investor Relationsa>li>
- <li><a href=”#”>Terms of Servicea>li>
- ul>
- div>
- <div class=”col-lg-2 col-sm-6 single-footer-widget”>
- <h4>Resourcesh4>
- <ul>
- <li><a href=”#”>Guidesa>li>
- <li><a href=”#”>Researcha>li>
- <li><a href=”#”>Expertsa>li>
- <li><a href=”#”>Agenciesa>li>
- ul>
- div>
- <div class=”col-lg-4 col-md-6 single-footer-widget”>
- <h4>Newsletterh4>
- <p>You can trust us. we only send promo offers,p>
- <div class=”form-wrap” id=”mc_embed_signup”>
- <form target=”_blank” action=”https://spondonit.us12.list-manage.com/subscribe/post?u=1462626880ade1ac87bd9c93a&id=92a4423d01″
- method=”get” class=”form-inline”>
- <input class=”form-control” name=”EMAIL” placeholder=”Your Email Address” onfocus=”this.placeholder = ”” onblur=”this.placeholder = ‘Your Email Address'”
- required=”” type=”email” />
- <button class=”click-btn btn btn-default”>
- <i class=”ti-arrow-right”>i>
- button>
- <div style=”position: absolute; left: -5000px;”>
- <input name=”b_36c4fd991d266f23781ded980_aefe40901a” tabindex=”-1″ value=”” type=”text” />
- div>
- <div class=”info”>div>
- form>
- div>
- div>
- div>
- <div class=”row footer-bottom d-flex justify-content-between”>
- <p class=”col-lg-8 col-sm-12 footer-text m-0″>
- Copyright ©<script>document.write(new Date().getFullYear());script> All rights reserved | This template is made with <i class=”fa fa-heart” aria-hidden=”true”>i> by <a href=”https://colorlib.com” target=”_blank”>Colorliba>
- p>
- <div class=”col-lg-4 col-sm-12 footer-social”>
- <a href=”#”><i class=”fab fa-facebook-f”>i>a>
- <a href=”#”><i class=”fab fa-twitter”>i>a>
- <a href=”#”><i class=”fab fa-dribbble”>i>a>
- <a href=”#”><i class=”fab fa-linkedin”>i>a>
- div>
- div>
- div>
- footer>
- <script src=”js/jquery-2.2.4.min.js”>script>
- <script src=”js/popper.js”>script>
- <script src=”js/bootstrap.min.js”>script>
- <script src=”js/stellar.js”>script>
- <script src=”vendors/owl-carousel/owl.carousel.min.js”>script>
- <script src=”js/jquery.ajaxchimp.min.js”>script>
- <script src=”js/waypoints.min.js”>script>
- <script src=”js/mail-script.js”>script>
- <script src=”js/contact.js”>script>
- <script src=”js/jquery.form.js”>script>
- <script src=”js/jquery.validate.min.js”>script>
- <script src=”js/mail-script.js”>script>
- <script src=”js/theme.js”>script>
- body>
- html>
_Layout.cshtml 파일을 수정했지만 WebSite 에서 사용하는 javascript, StyleSheet, Image 파일들을 복사하고 경로를 잡아주는 과정이 진행되어야 합니다.
4. Image, Javascript, StyleSheet :
“Medcare” Template Source 에서 아래 그림과 같이 “css, fonts, img, js, vendors” 폴더를 복사합니다.
그리고 Visual Studio 2022 의 Solution Explorer (솔루션 탐색기)에서 wwwroot를 오른쪽 click 하여 “Open Folder in File Explorer(파일탐색기에서 폴더열기)” 를 cliek 합니다.File Explorer (파일탐색기)가 열리면 wwwroot 폴더에 복사한 파일을 붙여 넣습니다.
결과는 다음과 같습니다.
5. 실행 :
지금까지 작업이 잘 되었는지 확인해 보겠습니다.


마무리
이번 편에서는 “Medcare” template 기반의 MVC Web Application에 공통 Layout인 _Layout.cshtml 파일을 수정하여 Layout 을 적용하는 과정을 살펴봤습니다. 깊이 살펴보아야 할 기본 내용은 많습니만 진행과정을 단순하게 하여 WebSite 제작에 쉽게 접근하도록 구성해 봤습니다. 내용이 길어 Header와 Footer를 적용하고, CSS와 JavaScript 파일을 분리하는 과정은 다음 편에서 살펴보겠습니다.
Happy GoSu ~
WooGong ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\