为什么tempData在tempData中添加很多项时总是为null?

时间:2016-01-22 10:19:20

标签: c# asp.net-mvc asp.net-mvc-5 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>

1 个答案:

答案 0 :(得分:3)

TempData中的变量在访问后会自动标记为删除。您可以通过显式调用Keep方法

来保留它们
  

您可以使用TempDataDictionary对象以相同的方式传递数据   您使用ViewDataDictionary对象。但是,中的数据   TempDataDictionary对象仅保留从一个请求到下一个请求,   除非您使用Keep标记一个或多个要保留的密钥   方法即可。如果某个键被标记为保留,则会保留该键   下一个请求。

     

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

来源:TempDataDictionary Class

因为我对它的生命周期感到好奇,所以如果有兴趣进一步阅读,我会浏览源代码并写博客:Inner-workings of TempData in ASP.NET MVC 5

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