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是一个字典types
public 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的比较