Answers:
一句话:TempData
就像ViewData一样,只有一个区别:它们仅包含两个连续请求之间的数据,之后它们被销毁。您可以TempData
用来传递错误消息或类似内容。
尽管已过时,但本文对TempData
生命周期有很好的描述。
正如本·谢尔曼(Ben Scheirman)在这里说的那样:
TempData是一个会话支持的临时存储字典,可用于单个请求。在控制器之间传递消息非常好。
TempData
因为与方法之间传递的简单字典相比,涉及的内容(会话)可能要复杂得多
当动作返回RedirectToAction结果时,它将导致HTTP重定向(等效于Response.Redirect)。可以在单个HTTP重定向请求期间将数据保留在控制器的TempData属性(字典)中。
ViewData:
ViewData
是字典类型 public ViewDataDictionary ViewData { get; set; }
ControllerBase
,它是Controller
class 的父级TempData:
TempData
内部使用TempDataDictionary
:public TempDataDictionary TempData { get; set; }
TempDataDictionary
对象中:
此行为是ASP.NET MVC 2和更高版本的新增功能。在早期版本的ASP.NET MVC中,中的值TempData
仅在下一个请求之前可用。
我发现此比较有用:http : //www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html
我遇到的一个问题是,默认情况下会清除TempData值。有选项,有关更多信息,请参见Msdn上的“ Peek”和“ Keep”方法。
当我们要将数据从控制器传递到相应的视图时,将使用视图数据。查看数据的寿命很短,这意味着重定向发生时它将破坏。示例(控制器):
public ViewResult try1()
{
ViewData["DateTime"] = DateTime.Now;
ViewData["Name"] = "Mehta Hitanshi";
ViewData["Twitter"] = "@hitanshi";
ViewData["City"] = "surat";
return View();
}
try1.cshtm
<table>
<tr>
<th>Name</th>
<th>Twitter</th>
<th>Email</th>
<th>City</th>
<th>Mobile</th>
</tr>
<tr>
<td>@ViewData["Name"]</td>
<td>@ViewData["Twitter"]</td>
<td>@ViewData["City"]</td>
</tr>
</table>
TempData在控制器之间或动作之间传输数据。它用于存储一次消息,并且寿命很短。我们可以使用TempData.Keep()使它可通过所有操作使用或使其持久化。
示例(控制器):
public ActionResult try3()
{
TempData["DateTime"] = DateTime.Now;
TempData["Name"] = "Ravina";
TempData["Twitter"] = "@silentRavina";
TempData["Email"] = "Ravina12@gmail.com";
TempData["City"] = "India";
TempData["MobNo"] = 9998975436;
return RedirectToAction("TempView1");
}
public ActionResult TempView1()
{
return View();
}
TempView1.cshtm
<table>
<tr>
<th>Name</th>
<th>Twitter</th>
<th>Email</th>
<th>City</th>
<th>Mobile</th>
</tr>
<tr>
<td>@TempData["Name"]</td>
<td>@TempData["Twitter"]</td>
<td>@TempData["Email"]</td>
<td>@TempData["City"]</td>
<td>@TempData["MobNo"]</td>
</tr>
</table>
只是TempData的一个旁注。
直到下一个请求才存储其中的数据,直到下一个读取操作被调用为止!
请参阅:
TempData在第二次请求后不会销毁
TempData
这里添加一些内容stackoverflow.com/a/17199709/2015869