为什么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 :(得分:3)
TempData中的变量在访问后会自动标记为删除。您可以通过显式调用Keep方法
来保留它们您可以使用TempDataDictionary对象以相同的方式传递数据 您使用ViewDataDictionary对象。但是,中的数据 TempDataDictionary对象仅保留从一个请求到下一个请求, 除非您使用Keep标记一个或多个要保留的密钥 方法即可。如果某个键被标记为保留,则会保留该键 下一个请求。
TempDataDictionary对象的典型用法是传递 动作方法重定向到另一个动作方法时的数据。 例如,操作方法可能存储有关错误的信息 在控制器的TempData属性中(返回一个 TempDataDictionary对象)在调用RedirectToAction之前 方法。然后,下一个操作方法可以处理错误并呈现 显示错误消息的视图。
因为我对它的生命周期感到好奇,所以如果有兴趣进一步阅读,我会浏览源代码并写博客:Inner-workings of TempData in ASP.NET MVC 5
你也可以调用Peek方法来检索值并保留它们。