[ASP.NET MVC][달력 만들기] 2. ASP.NET MVC View - 디자인
이번에는 지난번 생성한 View 에 디자인 요소를 추가 하고,
Controller에서 데이터를 받아와 달력의 Title 까지 추가 해보도록 하자.
달력의 Design 참고는 아래의 사이트에서 참고 했고, 색상을 조금 변경 해서 올려 두었다.
https://responsivedesign.is/patterns/calendar/
Calendar - Responsive Web Design
A responsive calendar layout pattern that starts with a list of days for the month and responds to a traditional calendar format.
responsivedesign.is
우선 2022년 2월달 달력을 구성 해 보자.
[calender.cshtml]
<link rel="stylesheet" href="~/css/calender.css" />
<div id="calendar-wrap">
<div id="calendar">
<ul class="weekdays">
<li>일</li>
<li>월</li>
<li>화</li>
<li>수</li>
<li>목</li>
<li>금</li>
<li>토</li>
</ul>
<!-- Row #1 -->
<ul class="days">
<li class="day other-month">
<div class=date>30</div>
</li>
<li class="day other-month">
<div class=date>31</div>
</li>
<li class="day">
<div class=date>1</div>
</li>
<li class="day">
<div class=date>2</div>
</li>
<li class="day">
<div class=date>3</div>
</li>
<li class="day">
<div class=date>4</div>
</li>
<li class="day">
<div class=date>5</div>
</li>
</ul>
<!-- Row #2 -->
<ul class="days">
<li class="day">
<div class=date>6</div>
</li>
<li class="day">
<div class=date>7</div>
</li>
<li class="day">
<div class=date>8</div>
</li>
<li class="day">
<div class=date>9</div>
</li>
<li class="day">
<div class=date>10</div>
</li>
<li class="day">
<div class=date>11</div>
</li>
<li class="day">
<div class=date>12</div>
</li>
</ul>
<!-- Row #3 -->
<ul class="days">
<li class="day">
<div class=date>13</div>
</li>
<li class="day">
<div class=date>14</div>
</li>
<li class="day">
<div class=date>15</div>
</li>
<li class="day">
<div class=date>16</div>
</li>
<li class="day">
<div class=date>17</div>
</li>
<li class="day">
<div class=date>18</div>
</li>
<li class="day">
<div class=date>19</div>
</li>
</ul>
<!-- Row #4 -->
<ul class="days">
<li class="day">
<div class=date>20</div>
</li>
<li class="day">
<div class=date>21</div>
</li>
<li class="day">
<div class=date>22</div>
</li>
<li class="day">
<div class=date>23</div>
</li>
<li class="day">
<div class=date>24</div>
</li>
<li class="day">
<div class=date>25</div>
</li>
<li class="day">
<div class=date>26</div>
</li>
</ul>
<!-- Row #5 -->
<ul class="days">
<li class="day">
<div class=date>27</div>
</li>
<li class="day">
<div class=date>28</div>
</li>
<li class="other-month">
<div class=date>1</div>
</li>
<li class="other-month">
<div class=date>2</div>
</li>
<li class="other-month">
<div class=date>3</div>
</li>
<li class="other-month">
<div class=date>4</div>
</li>
<li class="other-month">
<div class=date>5</div>
</li>
</ul>
<!-- Row #6 -->
<ul class="days">
<li class="other-month">
<div class=date>6</div>
</li>
<li class="other-month">
<div class=date>7</div>
</li>
<li class="other-month">
<div class=date>8</div>
</li>
<li class="other-month">
<div class=date>9</div>
</li>
<li class="other-month">
<div class=date>10</div>
</li>
<li class="other-month">
<div class=date>11</div>
</li>
<li class="other-month">
<div class=date>12</div>
</li>
</ul>
</div>
</div>
[calender.css]
body {
font-family: Tahoma;
}
header {
text-align: center;
}
#calendar {
width: 100%;
}
#calendar a {
color: #90b9eb;
text-decoration: none;
}
#calendar ul {
list-style: none;
padding: 0;
margin: 0;
width: 100%;
}
#calendar li {
display: block;
float: left;
width: 14.342%;
padding: 5px;
box-sizing: border-box;
border: 1px solid #ccc;
margin-right: -1px;
margin-bottom: -1px;
}
#calendar ul.weekdays {
height: 40px;
background: #90b9eb;
}
#calendar ul.weekdays li {
text-align: center;
text-transform: uppercase;
line-height: 20px;
border: none !important;
padding: 10px 6px;
color: #fff;
font-size: 13px;
}
#calendar .days li {
height: 100px;
}
#calendar .days li:hover {
background: #d3d3d3;
}
#calendar .date {
text-align: center;
margin-bottom: 5px;
padding: 4px;
/*background: #333;*/
color: #333;
width: 20px;
border-radius: 50%;
float: right;
}
#calendar .event {
text-align: center;
clear: both;
display: block;
font-size: 13px;
border-radius: 4px;
padding: 5px;
margin-top: 30px;
margin-bottom: 5px;
line-height: 13px;
background: #e4f2f2;
/*background:#000000;*/
border: 1px solid #b5dbdc;
/*border: 1px solid #000000;*/
color: #009aaf;
/*color: #000000;*/
/*color: rgb(193 88 54 / 0.13);*/
text-decoration: none;
}
#calendar .event-desc {
color: #666;
margin: 3px 0 7px 0;
text-decoration: none;
}
#calendar .event-holiday {
text-align: center;
clear: both;
display: block;
font-size: 13px;
border-radius: 4px;
padding: 5px;
margin-top: 30px;
margin-bottom: 5px;
line-height: 13px;
background: rgb(245 125 125 / 0.74);
/*background:#000000;*/
border: 1px solid #b5dbdc;
/*border: 1px solid #000000;*/
color: rgb(247 91 91 / 0.95);
/*color: #000000;*/
/*color: rgb(193 88 54 / 0.13);*/
text-decoration: none;
}
#calendar .event-holiday-desc {
color: #666;
margin: 3px 0 7px 0;
text-decoration: none;
}
#calendar .other-month {
background: #f5f5f5;
color: #666;
}
/* ============================
Mobile Responsiveness
============================*/
@media (max-width: 768px) {
#calendar .weekdays, #calendar .other-month {
font-size: 0.3em;
height: 10px;
}
#calendar li {
height: 15%;
box-sizing: border-box;
border: 1px solid #ededed;
padding: 10px;
margin-bottom: -1px;
font-size: 5px;
}
#calendar .day {
font-size: 5px;
}
#calendar .days li {
height: 50px;
}
#calendar ul.weekdays {
height: 30px;
font-size: 10px;
font-weight: bold;
}
#calendar ul.weekdays li {
text-align: center;
text-transform: uppercase;
line-height: 15px;
border: none !important;
padding: 10px 6px;
color: #fff;
}
#calendar .date {
text-align: right;
font-size: 13px;
margin-right: -5px;
margin-top: -10px;
width: 20px;
padding: 0px;
}
#calendar .event {
text-align: center;
clear: both;
display: block;
border-radius: 4px;
padding: initial;
margin-top: 3px;
margin-left: -7px;
margin-right: -7px;
background: #e4f2f2;
border: 1px solid #b5dbdc;
color: #009aaf;
text-decoration: none;
font-size: 5px;
}
#calendar .event-holiday {
text-align: center;
clear: both;
display: block;
border-radius: 4px;
padding: initial;
margin-top: 3px;
margin-left: -7px;
margin-right: -7px;
background: #e4f2f2;
text-decoration: none;
font-size: 5px;
background: rgb(245 125 125 / 0.74);
color: rgb(247 91 91 / 0.95);
text-decoration: none;
}
#calendar .event-desc {
}
}
우선 이렇게 실행을 하면 아래와 같은 화면이 나온다.
여기서 달력의 Titie 을 Controller 에서 넘겨 받아 표시 해 보도록 하자.
여기서는 우선 ViewBag 을 이용해서 Title 을 표기 할 것이다.
우선
[HomeController.cs]
public IActionResult Calender()
{
ViewBag.Title = "2022년 2월";
return View();
}
ViewBag 객체에 Title 이란 이름에 '2022년 2월' 이라는 값을 담아 두도록 하자.
이제
[Calender.cshtml]
<header>
<h1>
@ViewBag.Title
</h1>
</header>
위 내용을 Calneder.cshtml 의 첫번째 div 태그 아래에 배치 하고, @ViewBag.Title 의 값을 불러온다.
여기서 @는 cshtml 구조에서 C# 코드를 처리 하기 위한 태그?? 라고 생각 하면 된다.
한마디로 @뒤에 오는 내용은 C# 코드처럼 처리가 된다는 것이다.
실제로 C# 코드에서 ViewBag에 있는 값을 불러 올 때도,
string title = ViewBag.Title;
이렇게 해서 가져올 수 있다.
그러면 이렇게해서 나온 결과물을 확인 해 보자.
오늘 다뤄본 내용은, 모든 달력 내용을 개발자가 일일이 손으로 집어 넣은 내용이다.
이렇게 계속 쓰려면, 다음달로 넘어가거나 월 이 바뀔때 마다 모조리 변경 해 줘야 한다.
그렇다면, ASP.NET MVC 에서는 Model 을 이용해 조회하고자 하는 년도와 월을 인자값으로 받아
데이터를 처리하고, 처리한 데이터를 가지고 Controller 를 통해 View 단에 뿌려줄 수 가 있다.
다음번 글에서 다뤄볼 내용이 View 에서 Model 을 전달받아
View 를 구성하는 방법으로 달력을 구성해 볼 예정이다.