MVC C# TempData

20
请问TempData在MVC中的作用是什么?我知道它的行为类似于ViewBag,但除此之外它还能做些什么呢?

不确定您从何处得出“它的行为类似于ViewBag”的想法,因为它根本没有这样做。 - jpmc26
3个回答

27
TempData是一个非常短暂的实例,你只能在当前和下一个请求中使用它!由于TempData的工作方式如此,你需要确切知道下一个请求会是什么,并重定向到另一个视图是唯一可以保证的时间。因此,唯一可靠使用TempData的场景是重定向。这是因为重定向会终止当前请求(并向客户端发送HTTP状态码302 Object Moved),然后在服务器上创建一个新请求来提供重定向视图。回顾之前的HomeController代码示例意味着TempData对象可能会产生与预期不同的结果,因为无法保证下一个请求的来源。例如,下一个请求可能来自完全不同的计算机和浏览器实例。
来源:http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

8

ViewBag

允许您创建动态属性

在控制器和视图之间传递数据

控制器

ViewBag.Name= "Lion";

视图

<div>
  <h4>@ViewBag.Name</h4>
 </div>

TempData

TempData是一个非常短暂的实例。

只应在当前和随后的请求期间使用它。

TempData字典用于在控制器操作之间共享数据。

TempData["Name"] = "Lion";

1
很抱歉,这个回答实际上并没有回答问题。-1 - Al Kepp

2

TempData是一个字典对象,它派生自TempDataDictionary类并存储在短暂的会话中。

public TempDataDictionary TempData { get; set; }

它是ControllerBase类的一个属性。它用于将数据从当前请求传递到后续请求(即从一个页面重定向到另一个页面)。 它的生命周期非常短,仅在目标视图完全加载时存在。 获取数据需要进行强制类型转换并检查空值以避免错误。它仅用于存储一次性消息,例如错误消息、验证消息。


1
这方面缺乏信息真是令人恼火。Tempdata在HTTP协议中是如何工作的?它是否像Play的https://www.playframework.com/documentation/2.6.x/JavaSessionFlash一样是一个短暂的cookie?它是存储在服务器端会话对象中的东西吗?如果是这样,这意味着如果您有多个服务器,则可能无法获取该TempData,因为它只存在于其中一个服务器上,对吧? - João Antunes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接