View에 데이터 전달하기
- viewModel
- viewData
- viewBag
ViewModel
- view에 model의 형식을 지정한다.
- controller에서 view에 model의 인스턴스를 전달한다.
- viewModel을 사용시 컴파일 때 인스턴스 형식의 유효성 검사를 진행한다.
- 사용법
// @model로 사용할 모델을 지정한다.
@model WebApplication1.ViewModels.Address
<h2>Contact</h2>
<address>
@Model.Street<br />
@Model.City, @Model.State @Model.PostalCode<br />
<abbr title="Phone">P:</abbr> 425.555.0100
</address>
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
var viewModel = new Address()
{
Name = "Microsoft",
Street = "One Microsoft Way",
City = "Redmond",
State = "WA",
PostalCode = "98052-6399"
};
return View(viewModel);
}
ViewData
- string 키를 통해 액세스되는 ViewDataDictionary 개체입니다.
- string을 제외하고 다른 개체 값을 추출할 때는 캐스트가 필요합니다.
- 런타임에 동적으로 확인됩니다.
- [viewData]라는 특성의 ViewDataAttribute를 사용할 수 있습니다.
@{ // Since Address isn't a string, it requires a cast.
var address = ViewData["Address"] as Address;
}
@ViewData["Greeting"] World!
<address>
@address.Name<br />
@address.Street<br />
@address.City, @address.State @address.PostalCode
</address>
public IActionResult SomeAction()
{
ViewData["Greeting"] = "Hello";
ViewData["Address"] = new Address()
{
Name = "Steve",
Street = "123 Main St",
City = "Hudson",
State = "OH",
PostalCode = "44236"
};
return View();
}
ViewBag
- ViewBag은 ViewData에 저장된 개체에 대한 동적 액세스를 제공
- 캐스팅이 필요하지 않다.
@ViewBag.Greeting World!
<address>
@ViewBag.Address.Name<br />
@ViewBag.Address.Street<br />
@ViewBag.Address.City, @ViewBag.Address.State @ViewBag.Address.PostalCode
</address>
public IActionResult SomeAction()
{
ViewBag.Greeting = "Hello";
ViewBag.Address = new Address()
{
Name = "Steve",
Street = "123 Main St",
City = "Hudson",
State = "OH",
PostalCode = "44236"
};
return View();
}
- ViewData와 ViewBag은 동일한 ViewData 컬렉션을 사용하므로 두 객체의 값을 읽고 쓸 때 혼합하여 사용할 수 있습니다.
@{ ViewBag.Title = "About Contoso"; // ViewBag 형식 }
<!DOCTYPE html>
<html lang="en">
<head>
// ViewData 형식
<title>@ViewData["Title"]</title>
</head>
</html>
ViewData와 ViewBag의 차이점
- ViewData
- 사전의 키는 문자열이므로 공백을 사용할 수 있습니다.
- ->
ViewData["Some Key With Whitespace"]
- string 이외의 모든 형식을 캐스트 해야합니다.
- ViewBag
- 점 표기법을 사용하며 캐스팅이 필요하지 않습니다.
- 간단하게 Null값을 확인할 수 있습니다.
- ->
@ViewBag.Person?.Name