ViewData、ViewBag、TempData、Session介绍
ViewBag是对ViewData的封装,其内部是使用ViewData实现数据存储的,不同的是,ViewBag可以存储动态类型的变量值, 而ViewData只能存储String Key/Object Value字典数组。
TempData也是一个String Key/Object Value字典数组。 和ViewData与ViewBag不同的是其所存储的数据对象的生命周期。如果页面发生了跳转,ViewBag和ViewData中的值将不复存在, 但是TempData中的值依然还在。
Session也是一个String Key/Object Value字典数组。但是,Session是存储在服务端的内存中或数据库(各个Web服务器处理方式不同),所以它的生命周期是最长的。
ViewData
ViewData用来从Controller向对应的View传递值,它只在当前的请求中有效,生命周期和View相同,而且它的值不能在多个请求中共享。在重定向后,ViewData中存储的变量值将变为null,而在取出ViewData中的变量值时,必须进行合适的类型转换(隐式或显式)和空值检查。
ViewBag
ViewBag是一个动态类型变量,这是C# 4.0引入的新特性,变量类型会在运行时进行解析, 它基本上是ViewData的包装,也是用来从Controller向View来传递值的,和ViewData一样,ViewBag也只在当前的请求中有效,并且在重定向后,ViewBag中存储的变量值也将变为null。因为ViewBag是动态类型,所以我们在取得其值时,不需要进行类型转换。
TempData
TempData是一个继承自TempDataDictionary类的字典对象,它默认情况下是基于Session存储机制之上的,它是用来在多个Actions或从当前请求向子请求, 页面发生了重定向时传递共享数据。TempData只有在目标视图完全加载后才有效,而在取出TempData存储的变量值时,必须进行合适的类型转换(隐式或显式)和空值检查。
Session
Session也是ASP.NET MVC程序传递值的一种方式,但与TempData不同,用户的整个会话中Session都不会过期,在同一用户会话过程中的所有请求中有效,比如,刷新页面,Session中的值也需要进行类型转换(隐式或显式)和非空检查。
传递方式的生命周期