ViewData和TempData的区别?

我知道ViewData是什么,并一直使用它,但在ASP.NET Preview 5中,他们引入了一些新的名为TempData。

我通常强烈键入我的ViewData,而不是使用对象的字典方法。

那么,什么时候应该使用TempData而不是ViewData呢?

有没有最佳做法呢?

在一个句子中: TempData就像ViewData有一个区别:它们只包含两个连续请求之间的数据,之后它们被销毁。 您可以使用TempData来传递错误消息或类似的东西。

虽然已经过时, 但本文对TempData生命周期有很好的描述。

正如本·谢尔曼在这里所说:

TempData是会话支持的临时存储字典,可用于一个请求。 在控制器之间传递消息是很好的。

当一个动作返回一个RedirectToAction结果时,它会导致一个HTTPredirect(相当于Response.Redirect)。 在单个HTTPredirect请求的持续时间内,数据可以保存在控制器的TempData属性(字典)中。

我发现这个比较有用: http : //www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html

我碰到的一个问题是TempData值在默认读取后被清除。 有选项, 请参阅MSDN上的方法“Peek”和“Keep”以获取更多信息 。

ViewData的:

  • ViewData是一个字典typespublic ViewDataDictionary ViewData { get; set; } public ViewDataDictionary ViewData { get; set; }
  • 它可以用来将数据从控制器传递到查看,只有一种方法
  • 只有在目前的要求下才有生命
  • 如果传递string,则不需要强制转换
  • 如果传递对象,那么你需要对它进行types转换,但在此之前你需要检查它是否为空
  • 它是ControllerBase的一个属性,它是Controller类的父类

TempData的:

  • TempData内部使用TempDataDictionary public TempDataDictionary TempData { get; set; } public TempDataDictionary TempData { get; set; }
  • 一旦数据被保存到TempDataDictionary对象中
  • 它坚持它,并可以从任何视图或任何ccontroller中的任何行动准备好
  • 它只能被读取一次,一旦读取,它就会变成空白
  • 它在会话数据丢失到期时保存到会话中
  • 这个行为是ASP.NET MVC 2和后一版本的新特性。
  • 在早期版本的ASP.NET MVC中,TempData中的值仅在下一个请求之前可用
  • 这是生活,直到它被读取或会话过期,并可以从任何地方读取

查看MVC中的ViewData,ViewBag,TempData和Session的比较