In ASP.NET MVC, ViewBag, ViewData, and TempData are mechanisms for passing data from controllers to views, but they have some differences in terms of usage, lifetime, and scope.
ViewBag
- Usage: ViewBag is a dynamic property that allows you to pass data from a controller action to a view. It is essentially a wrapper around ViewData and provides a more convenient way to access data.
- Lifetime: ViewBag data is available only for the current request. Once the request is processed and the view is rendered, ViewBag data is no longer accessible.
- Scope: ViewBag is specific to the current request and the view being rendered. It's not suitable for passing data across redirects or between different actions.
- Example
// Controller action public ActionResult Index() { ViewBag.Message = "Hello, ViewBag!"; return View(); } - In the view, you can access ViewBag.Message.
ViewData
- Usage: ViewData is a dictionary-like object that allows you to pass data from a controller to a view. It is of type ViewDataDictionary and stores data as key-value pairs.
- Lifetime: ViewData, like ViewBag, is available only for the current request. Once the request is processed and the view is rendered, ViewData is no longer accessible.
- Scope: ViewData is specific to the current request and the view being rendered. It's not suitable for passing data across redirects or between different actions.
- Example
// Controller action public ActionResult Index() { ViewData["Message"] = "Hello, ViewData!"; return View(); } - In the view, you can access ViewData["Message"].
TempData
- Usage: TempData is also a dictionary-like object for passing data from one request to another. It is typically used for scenarios where you need to pass data between different controller actions or during redirects.
- Lifetime: TempData is available for the current and the next request only. It is meant to be a short-lived storage mechanism for data that needs to survive a single redirect. After the second request, TempData data is automatically removed.
- Scope: TempData can be used to pass data across redirects or between different controller actions.
- Example
// Controller action public ActionResult Index() { TempData["Message"] = "Hello, TempData!"; return RedirectToAction("NextAction"); } // Another controller action public ActionResult NextAction() { var message = TempData["Message"]; return View(); } - In the NextAction view, you can access the message.
Conclusion
- ViewBag and ViewData are both used for passing data from a controller to a view for the current request, and they have a short lifetime within that request.
- TempData is used for passing data between different requests, typically during redirects, and it has a slightly longer lifetime that spans the current and the next request.
- If you need to pass data between controller actions within the same request, either ViewBag or ViewData can be used, but ViewBag offers a more concise syntax. If you need to pass data between requests, TempData is the appropriate choice.

Join the conversation! Your thoughts help the community grow.