Roadmap › ASP.NET Core MVC (and Razor Pages) › Module: Models, Binding and Validation
Lessons in this course (15)

7. Passing data: ViewData, ViewBag, TempData, strongly typed models

Intermediate★ Must knowLesson 7 of 15
TypeLifetimeUse
Strongly typed @modelAny classCurrent requestPreferred — compile-time checked
ViewDataViewDataDictionary (string keys)Current requestSmall extras, e.g. page title
ViewBagdynamic wrapper over ViewDataCurrent requestSame as ViewData, no casting
TempDataDictionary backed by cookie (default) or sessionUntil read (survives one redirect)Flash messages after PRG
SessionISession (needs AddSession + distributed cache)Across requestsWizard state, cart (prefer DB for important data)
csharp
ViewData["Title"] = "Products";
ViewBag.Count = 5;
TempData["Message"] = "Saved";           // read once on next request; TempData.Keep() / Peek() to retain
cshtml
@model IEnumerable<Product>
<h1>@ViewData["Title"]</h1>
@if (TempData["Message"] is string msg) { <div class="alert alert-success">@msg</div> }