View로 데이터를 전달하는 방법

  • Strongly typed data : 데이터 type을 명확하게 지정 가능함
    → viewmode
  • Weakly typed data : 데이터 type을 명확하게 지정하지 않고, 적은 양의 데이터를 전달하기 위해 사용
    → ViewData(ViewDataAttribute)
    → ViewBag

ViewData

String Keys를 통해 접근하며, Dictionary 객체이며 ViewDataDictionary 형식

목적은 Controller에서 View로 데이터를 가져오기 위한것

ViewData 객체에 저장된 data는 오직 현재 요청하는 그 당시에만 존재함.
view가 브라우저에 런더링 되자마자 ViewData의 객체는 Empty 상태로 됨. / ViewBag에 비해 속도 ↑
※ retrun value가 Object로 나오기 때문에 String을 제외하고는 cast해서 사용해야함.

 

ViewBag

ViewData를 Wrapper 한 부분 / Dynamic Object로 되어있음

Dictionary 객체들을 사용하는 key-value 보다 더 나은 object-property 문법을 사용해 값을 추출 및 저장하는 방법

자동으로 변수형을 유추하기 떄문에 사용 시 형 변환이 필요없음.
위와 같이 동적 액세스를 제공하기때문에 캐스팅이 필요하지 않음.

코드 예시

public List<string> Test()
{
    List<string> Person = new List<string>();
    Person.add("SC");
    Person.add("Ung");
    Person.add("JH");
    
    return Person;
}
// Controller value Input
// 변수처럼 사용하는것과 다를것 없음

ViewData["Person"] = this.Test();
ViewBag.Person = this.Test();
// 뷰에서는 ViewBag을 제외하고는 형 변환이 필요함
// TempData도 마찬가지

@foreach (var student in ViewBag.Person)
{
    <li>@Person</li>
}
 
@foreach (var person in ViewData["Person"] as List<string>)
{
    <li>@Person</li>
}
수토리지