ASP.NET MVC ViewBag/ViewData/TempData区别

ViewBag/ViewData

public dynamic ViewBag { get; }
public ViewDataDictionary ViewData { get; set; }

ViewBag和ViewData其实是互通的,区别是:ViewBag不再是字典的键值对接口,而是dynamic动态类型(C#4.0引入的新特性),会在程序运行的时候动态解析。ViewBag的本质就是ViewData,只不过多了层dynamic控制。

ViewBag和ViewData仅针对当前Action中有效,生命周期和View相同。

ViewData["isSuccess"]
ViewBag.Key = "Value";

TempData

TempData保存在Session中,controller每次执行请求时,会从Session中获取Tempdata(),而后清除session。

TempData可以跨Action传递,TempData的数据至多只能经过一次Controller传递, 并且每个元素至多只能被访问一次.