为什么在TempData中添加许多项时TempData总是为null?
我在控制器中的代码:
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>
最佳答案
访问它们后,TempData中的变量会自动标记为删除。您可以通过显式调用Keep方法来保留它们
您可以使用TempDataDictionary对象以相同的方式传递数据
您使用ViewDataDictionary对象。但是,
TempDataDictionary对象仅在一个请求到另一个请求之间持续存在,
除非您使用“保留”将一个或多个键标记为保留键
方法。如果将密钥标记为保留,则该密钥将保留为
下一个要求。
TempDataDictionary对象的典型用法是传递
动作方法重定向到另一个动作方法时的数据。
例如,一种操作方法可能存储有关错误的信息
在控制器的TempData属性中(返回一个
TempDataDictionary对象),然后调用RedirectToAction
方法。然后,下一个操作方法可以处理错误并呈现
显示错误消息的视图。
资料来源:TempDataDictionary Class
因为我对它的生命周期感到好奇,所以我遍历了源代码,并在博客中撰写了有关进一步阅读的文章:Inner-workings of TempData in ASP.NET MVC 5
您还可以调用Peek方法来检索值并仍然保留它们。