ViewData는 ASP.NET MVC에서 컨트롤러(Controller)와 뷰(View) 사이에 데이터를 전달하기 위해 사용되는 객체 딕셔너리입니다. 문자열을 키(Key)로 사용하여 데이터를 저장하고 조회할 수 있으며, 내부적으로 키-값(Key-Value) 쌍으로 구성되어 있습니다.
ViewData의 주요 특징
- 데이터 전달 방향은 컨트롤러 → 뷰로만 가능하며, 그 반대 방향(뷰 → 컨트롤러)으로는 사용할 수 없습니다.
- 모든 키는 반드시 문자열(string)이어야 합니다.
- 데이터는 현재 요청(Request) 동안에만 유효합니다. 즉, 리다이렉션이 발생하면 ViewData의 값은 유지되지 않습니다.
ViewData에 데이터 저장하기
ViewData["countries"] = countriesList;
ViewData에서 데이터 가져오기
string country = ViewData["MyCountry"].ToString();
ViewData 사용 시 주의사항
ViewData는 컴파일 타임 오류 검사를 지원하지 않습니다. 예를 들어, 키 이름을 잘못 입력(오타)해도 컴파일 시점에는 오류가 발생하지 않으며, 런타임에 실행되기 전까지는 문제를 알 수 없습니다. 따라서 키 이름을 일관성 있게 관리하는 것이 중요합니다.
컨트롤러 예제
다음은 HomeController에서 국가 목록을 ViewData에 저장하는 예제입니다.
using System.Collections.Generic;
using System.Web.Mvc;
namespace DemoMvcApplication.Controllers{
public class HomeController : Controller{
public ViewResult Index(){
ViewData["Countries"] = new List<string>{
"India",
"Malaysia",
"Dubai",
"USA",
"UK"
};
return View();
}
}
}뷰(View) 예제
저장된 ViewData 값을 뷰에서 읽어와 화면에 출력하는 코드입니다. ViewData는 object 타입을 반환하므로 반드시 적절한 타입으로 캐스팅해야 합니다.
@{
ViewBag.Title = "Countries List";
}
<h2>Countries List</h2>
<ul>
@foreach(string country in (List<string>)ViewData["Countries"]){
<li>@country</li>
}
</ul>실행 결과
위 코드를 실행하면 브라우저에 다음과 같이 국가 목록이 순서 없는 리스트 형태로 출력됩니다.

마무리 정리
ViewData는 MVC 패턴에서 컨트롤러가 뷰에 간단한 데이터를 전달할 때 유용하게 활용됩니다. 다만 타입 캐스팅이 필요하고 컴파일 타임 검사가 이루어지지 않는다는 점에서, 보다 안전한 방식을 원한다면 강력한 타입(strongly-typed) 모델이나 ViewBag 사용도 함께 고려해 볼 수 있습니다.