【问题标题】:why tempData always null when add many item in tempData?为什么在 tempData 中添加许多项时 tempData 总是为空?
【发布时间】:2016-01-22 10:19:19
【问题描述】:

为什么在 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>

【问题讨论】:

  • 使用 ViewBag 或 ViewData 代替您的临时数据。原因是 Tempdata 仅对控制器到控制器的数据传递有用。同样,一旦您阅读它,它的生命就结束了。
  • viewbag 和 viewdata :如果发生重定向,则其值为 null。

标签: c# asp.net-mvc asp.net-mvc-5 tempdata


【解决方案1】:

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

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

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

来源:TempDataDictionary Class

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

您还可以调用 Peek 方法来检索值并仍然保留它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多