ViewDifference Between ViewData, ViewBag, and TempData in ASP.NET MVC
ASP.NET MVC provides multiple ways to pass data between controllers and views. Three common options are ViewData, ViewBag, and TempData. Each has its own purpose and use cases. In this blog, we will explore the differences between them and when to use each one. 1. ViewData What is ViewData? ViewData is a dictionary object (derived from ViewDataDictionary) that stores data as key-value pairs. It is used to pass data from a controller to a view. Key Points: Stores data as key-value pairs. Requires typecasting and null checks. Available only during the current request. Example: Controller (C#) public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Hello from ViewData!"; return View(); } } View (Index.cshtml) @ViewData["Message"] Output: Hello from ViewData! 2. ViewBag What is ViewBag? ViewBag is a dynamic wrapper around ViewData. It allows passing data without requiring typecasting. Key Points: Uses dynamic properties (no need for typecasting). Internally uses ViewData. Available only during the current request. Example: Controller (C#) public class HomeController : Controller { public ActionResult Index() { ViewBag.Greeting = "Hello from ViewBag!"; return View(); } } View (Index.cshtml) @ViewBag.Greeting Output: Hello from ViewBag! 3. TempData What is TempData? TempData is a dictionary derived from TempDataDictionary. It is used to store data temporarily and is available across multiple requests. Key Points: Used to store data across redirects. Data is available for only one request unless Keep() or Peek() is used. Requires typecasting and null checks. Example: Controller public class HomeController : Controller { public ActionResult SetMessage() { TempData["Notice"] = "Hello from TempData!"; return RedirectToAction("ShowMessage"); } public ActionResult ShowMessage() { return View(); } } View @TempData["Notice"] Output Hello from TempData! Comparison Table When to Use What? Use ViewData when you need to pass data from controller to view and don’t mind typecasting. Use ViewBag when you prefer a simpler and more readable syntax without typecasting. Use TempData when you need to persist data between multiple requests, such as after a redirect. Conclusion Understanding ViewData, ViewBag, and TempData is essential for managing data in ASP.NET MVC applications. Choosing the right one depends on your specific scenario. If you only need to pass data to a view, use ViewData or ViewBag. If you need to persist data across requests, TempData is the right choice.

ASP.NET MVC provides multiple ways to pass data between controllers and views. Three common options are ViewData, ViewBag, and TempData. Each has its own purpose and use cases. In this blog, we will explore the differences between them and when to use each one.
1. ViewData
What is ViewData?
ViewData is a dictionary object (derived from ViewDataDictionary) that stores data as key-value pairs. It is used to pass data from a controller to a view.
Key Points:
- Stores data as key-value pairs.
- Requires typecasting and null checks.
- Available only during the current request.
Example:
Controller (C#)
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Hello from ViewData!";
return View();
}
}
View (Index.cshtml)
@ViewData["Message"]
Output:
Hello from ViewData!
2. ViewBag
What is ViewBag?
ViewBag is a dynamic wrapper around ViewData. It allows passing data without requiring typecasting.
Key Points:
- Uses dynamic properties (no need for typecasting).
- Internally uses ViewData.
- Available only during the current request.
Example:
Controller (C#)
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Greeting = "Hello from ViewBag!";
return View();
}
}
View (Index.cshtml)
@ViewBag.Greeting
Output:
Hello from ViewBag!
3. TempData
What is TempData?
TempData is a dictionary derived from TempDataDictionary. It is used to store data temporarily and is available across multiple requests.
Key Points:
- Used to store data across redirects.
- Data is available for only one request unless Keep() or Peek() is used.
- Requires typecasting and null checks.
Example:
Controller
public class HomeController : Controller
{
public ActionResult SetMessage()
{
TempData["Notice"] = "Hello from TempData!";
return RedirectToAction("ShowMessage");
}
public ActionResult ShowMessage()
{
return View();
}
}
View
@TempData["Notice"]
Output
Hello from TempData!
Comparison Table
When to Use What?
- Use ViewData when you need to pass data from controller to view and don’t mind typecasting.
- Use ViewBag when you prefer a simpler and more readable syntax without typecasting.
- Use TempData when you need to persist data between multiple requests, such as after a redirect.
Conclusion
Understanding ViewData, ViewBag, and TempData is essential for managing data in ASP.NET MVC applications. Choosing the right one depends on your specific scenario. If you only need to pass data to a view, use ViewData or ViewBag. If you need to persist data across requests, TempData is the right choice.