为什么tempData在tempData中添加很多项时总是为空?
问题描述:
为什么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>
答
在TempData的变量被自动标记为删除在他们被访问后。您可以通过显式调用保持方法
可以使用TempDataDictionary对象在您使用的ViewDataDictionary对象以相同的方式 数据传递留住他们。但是,除非通过使用Keep 方法将一个或多个键标记为保留,否则中的数据只能从一个请求到下一个 ,因此TempDataDictionary对象中的数据只会保留。如果某个密钥被标记为保留,则该密钥将保留用于下一个请求 。
TempDataDictionary对象的一个典型用途是在操作方法重定向到另一个操作方法时传递 数据。 例如,操作方法可能会在调用RedirectToAction 方法之前,将关于错误 的信息存储在控制器的TempData属性(返回 TempDataDictionary对象)中。接下来的操作方法可以处理该错误,并呈现显示错误消息的视图 。
因为我很好奇,它的生命周期,所以我通过源代码去了,如果有兴趣进一步阅读的博客上讲述它:Inner-workings of TempData in ASP.NET MVC 5
你也可以调用Peek方法来检索价值并仍然保留它们。
在您的tempdata的原位使用ViewBag或ViewData。原因是Tempdata仅用于控制器到控制器数据传递。一旦你读了它的生活就结束了。 –
viewbag和viewdata:如果发生重定向,则它的值将变为null。 – testStack201541