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>
}