6

我在用

TempData["hdn"] = "1";

在控制器中

如果我用这个

 @{
      var hdn = (string)TempData["hdn"];
  }

在视图中,TempData["hdn"]在 POST 中获取 null 的值。如果我在视图中跳过此代码,它会在 POST 中持续存在。为什么会这样?

4

4 回答 4

10

TempData 值在读取后被清除。

如果您希望在视图中读取该值后将其返回到控制器中,那么您需要将其包含在隐藏字段中,然后从表单值中读取它。

就像是:

<input type="hidden" name="hdn" value="@hdn" />

然后在您的控制器中,您可以执行以下操作:

var hdn = Request.Form["hdn"]

高温高压

于 2013-08-28T12:06:41.993 回答
9

TempData类似于 ViewData 但有区别。它可以包含两个连续请求之间的数据,之后它们被销毁。

如果你想保持TempData使用价值

TempData.Keep()

例子:

var hdn= TempData["hdn"]; //it is marked for deletion
TempData.Keep("hdn"); //unmarked it

Keep 的 MSDN 文档

于 2013-08-28T12:05:38.670 回答
5

TempData调用后将删除键值集。Satpal 谈到了 Keep,但如果您想明确每次想要检索它而不删除它,您也可以使用 Peek。

TempData.Peek(String)

例子:

var hdnNotDeleted = TempData.Peek["hdn"];

Peek 的 MSDN 文档

于 2015-11-02T10:55:05.340 回答
1

如果您的控制器操作返回 a ViewResult,并且您很想将数据放入,那么在这种情况下, TempData请不要这样做。使用 。意味着是一个非常短暂的实例,您应该只在当前和后续请求期间使用它。由于以这种方式工作,您需要确定下一个请求将是什么,并且对于另一个请求是您唯一可以保证这一点的时间。因此,使用Reliably 工作的唯一场景是在重定向时。所以请记住。ViewData/ViewBagTempDataTempDataRedirectingViewTempData

有史以来最好的解释:http ://sampathloku.blogspot.com/2012/09/how-to-use-aspnet-mvc-tempdata-properly.html

于 2019-07-12T20:22:30.773 回答