728x90

View에 데이터 전달하기

  1. viewModel
  2. viewData
  3. 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
728x90

'C#' 카테고리의 다른 글

IIS Server Header 제거하기  (0) 2023.05.12
[.NET] SmtpClient  (0) 2022.12.02
[.NET] MailMessage  (0) 2022.12.01
[.NET] System.Data.DataTable/DataRow/DataColumn  (0) 2022.11.30
[.NET] FormsAuthentication 폼 인증 설정  (0) 2022.11.30

+ Recent posts