2016-01-22 28 views
1

为什么TempData在TempData中添加多个项目时总是为空?为什么tempData在tempData中添加很多项时总是为空?

我的代码在控制器:

TempData[Partial1.TempDataKey] = "bla bla"; 
TempData[Partial2.TempDataKey] = "bla bla 2"; 

我的代码布局:

@{Html.RenderPartial(MVC.Administrator.Shared.Views._Partial1);} 
@{Html.RenderPartial(MVC.Administrator.Shared.Views._Partial2);} 

我的代码在_Partial1:

<span>@(TempData.ContainsKey(Partial1.TempDataKey))</span> 

我的代码在_Partial2:

<span>@(TempData.ContainsKey(Partial2.TempDataKey))</span> 

结果始终是:

<span>False</span> 
<span>False</span> 

当我在控制器上他们的去除:

TempData[Partial1.TempDataKey] = "bla bla"; 
//TempData[Partial2.TempDataKey] = "bla bla 2"; 

然后结果是:

<span>True</span> 
+0

在您的tempdata的原位使用ViewBag或ViewData。原因是Tempdata仅用于控制器到控制器数据传递。一旦你读了它的生活就结束了。 –

+0

viewbag和viewdata:如果发生重定向,则它的值将变为null。 – testStack201541

回答

3

在TempData的变量被自动标记为删除在他们被访问后。您可以通过显式调用保持方法

可以使用TempDataDictionary对象在您使用的ViewDataDictionary对象以相同的方式 数据传递留住他们。但是,除非通过使用Keep 方法将一个或多个键标记为保留,否则中的数据只能从一个请求到下一个 ,因此TempDataDictionary对象中的数据只会保留。如果某个密钥被标记为保留,则该密钥将保留用于下一个请求 。

TempDataDictionary对象的一个​​典型用途是在操作方法重定向到另一个操作方法时传递 数据。 例如,操作方法可能会在调用RedirectToAction 方法之前,将关于错误 的信息存储在控制器的TempData属性(返回 TempDataDictionary对象)中。接下来的操作方法可以处理该错误,并呈现显示错误消息的视图 。

来源:TempDataDictionary Class

因为我很好奇,它的生命周期,所以我通过源代码去了,如果有兴趣进一步阅读的博客上讲述它:Inner-workings of TempData in ASP.NET MVC 5

你也可以调用Peek方法来检索价值并仍然保留它们。