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
| Type | Lifetime | Use | |
|---|---|---|---|
Strongly typed @model | Any class | Current request | Preferred — compile-time checked |
ViewData | ViewDataDictionary (string keys) | Current request | Small extras, e.g. page title |
ViewBag | dynamic wrapper over ViewData | Current request | Same as ViewData, no casting |
TempData | Dictionary backed by cookie (default) or session | Until read (survives one redirect) | Flash messages after PRG |
| Session | ISession (needs AddSession + distributed cache) | Across requests | Wizard 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 retaincshtml
@model IEnumerable<Product>
<h1>@ViewData["Title"]</h1>
@if (TempData["Message"] is string msg) { <div class="alert alert-success">@msg</div> }