我正在使用
TempData["hdn"] = "1";
控制器中的如果我使用此
@{
var hdn = (string)TempData["hdn"];
}
在POST中获取null的视图TempData["hdn"]
中的。如果我在视图中跳过此代码,它会在POST中持续存在。为什么会这样?
答案 0 :(得分:9)
TempData
与ViewData类似,但有所不同。它可以包含两个连续请求之间的数据,之后它们将被销毁。
如果您希望保留TempData
值
TempData.Keep()
示例:
var hdn= TempData["hdn"]; //it is marked for deletion
TempData.Keep("hdn"); //unmarked it
答案 1 :(得分:8)
TempData值在读取后被清除。
如果您希望在视图中读取后在控制器中返回值,则需要将其包含在隐藏字段中,然后从表单值中读取它。
类似的东西:
<input type="hidden" name="hdn" value="@hdn" />
然后在您的控制器中,您可以执行以下操作:
var hdn = Request.Form["hdn"]
HTH
答案 2 :(得分:3)
TempData
密钥&amp;调用后将删除值集。 Satpal谈到了Keep,但是你也可以使用Peek,如果你想在没有删除的情况下每次想要检索它的话都要明确。
TempData.Peek(String)
示例:
var hdnNotDeleted = TempData.Peek["hdn"];
答案 3 :(得分:0)
如果您的控制器操作返回了ViewResult
,并且您很想将数据放入TempData
,
请勿这样做。在这种情况下,请使用ViewData/ViewBag
。
TempData
是一个非常短暂的实例,您只能在当前请求和后续请求中使用它。由于TempData
以这种方式工作,因此您需要确定下一个请求是什么,并且只有Redirecting
到另一个View
才能保证这一点。因此,唯一有效使用TempData
的情况是在重定向时。所以请注意。
有史以来最好的解释:http://sampathloku.blogspot.com/2012/09/how-to-use-aspnet-mvc-tempdata-properly.html