MVC View Razor
Razor는 상대적으로 간단한 문법을 가지고 있으며, HTML 안에 C# (혹은 VB) 코드 넣어 동적인 HTML을 생성할 수
있도록 한다. 기본적으로 Razor는 하나 이상의 C# 문장 혹은 문장블럭을 표현하기 위해 @{ ... } 블럭을 사용한다.
블럭 안의 C# 코드는 표준 C#에서와 마찬가지로 세미콜론으로 둔다. 그리고 간단한 Inline 표현식은 @ 사인 뒤에 변수명
혹은 함수명을 쓴다. 기본적으로 @ 사인 안의 문장은 C# 문장이라고 보면 된다.
Razor에서 코멘트는 @* *@ 으로 둘러 싼다.
@{
// 일반 C# 코드 사용
ViewBag.Title = "Report Data";
string today = DateTime.Now.ToShortDateString();
}
<h2>@ViewBag.Title.</h2> @*Inline C# 코드*@
<h4>@today</h4>
<p>
Report Data...
</p>
Razor 조건문
Razor에서 조건문을 사용하기 위해 if ... else 문, if ... else if 문, 혹은 switch 문을 사용할 수 있다.
if 조건문은 @if 처럼 if 앞에만 @ 사인을 붙이면 되고,
블럭 안에 HTML문을 그대로 사용하면 Razor 엔진이 알아서 랜더링 해준다.
마찬가지로 switch 블럭도 처음 @switch을 사용하고 해당 블럭을 C# 처럼 사용하고 중간에 HTML을 혼용해서 사용할 수 있다.
아래 예제는 if 문과 switch 문을 사용한 예이다.
@{
int count = ViewBag.Count;
}
<p>
@*조건문*@
@if (count <= 0)
{
<div>데이타가 없습니다.</div>
}
else
{
<div>@count 건의 데이타가 있습니다.</div>
}
@switch (count)
{
case 1:
<div>하나</div>
break;
case 2:
<div>둘</div>
break;
default:
<div>셋 이상</div>
break;
}
</p>
Razor 반복문
Razor에서 반복문을 사용하기 위해 for 문, foreach 문, while 문을 사용할 수 있다.
각각의 반복문은 @for, @foreach, @while처럼 앞에 @ 사인을 붙이면 되고,
블럭 안에서는 C# 문과 HTML문을 혼용해서 사용하면 Razor 엔진이 알아서 랜더링 해준다.
아래 예제는 for 문, foreach, @while 문을 사용한 간단한 예이다.
@{
int count = ViewBag.Count;
string[] list = { "A", "B", "C"};
}
<p>
@*반복문*@
@for (int i = 0; i < count; i++)
{
<div>@i</div>
}
@foreach (var item in list)
{
<p>@item</p>
}
@{ int ix = 1; }
@while(ix < 10)
{
<div>@ix</div>
ix++;
}
</p>
@model 선언
Controller에서 데이타를 View에 전달하기 위해서는 ViewBag, ViewData, TempData을 사용하거나 Controller.View() 메서드에 모델 객체를 파라미터로 넘기는 방식을 사용한다.
모델 객체가 전달되었을 때, Razor에서는 "@model 모델타입" 과 같이 View 파일 상단에 어떤 모델 타입이 전달되었는지는 쓰게 된다.
이렇게 정의된 모델은 View 클래스의 "Model" 속성으로 해당 객체의 속성을 Strong Type 형태로 사용할 수 있다. 즉, 모델 객체에 Message 속성이 있으면, @Model.Message 와 같이 사용할 수 있으며,
VS에서 인텔리센스 기능도 제공한다. 또한, 한가지 주의할 점은 View에서 클래스 타입을 지정할 때, 클래스 타입 앞에 네임스페이스를 함께 써야 한다는 점이다.
물론 모든 클래스 앞에 네임스페이스를 쓸 필요 없이 맨 앞에 @using 을 써서 미리 네임스페이스를 선언할 수도 있다.
// View에서 모델 지정 및 사용
@using GuestBook.Models
@model Guest
<h2>@ViewBag.Title</h2>
<p>
@ViewData["MethodName"]
<br />
<div>@Model.Id : @Model.Name</div>
<div>
@Model.Message
</div>
</p>