Asp.net mvc 4 如果在视图中使用,则TempData值不持久
我正在使用Asp.net mvc 4 如果在视图中使用,则TempData值不持久,asp.net-mvc-4,tempdata,Asp.net Mvc 4,Tempdata,我正在使用 TempData["hdn"] = "1"; 内部控制器 如果我用这个 @{ var hdn = (string)TempData["hdn"]; } 在视图中,TempData[“hdn”]POST中获取null的值。如果我在视图中跳过此代码,它将在POST中持续存在。为什么会发生这种情况?TempData与ViewData类似,但有所不同。它可以包含两个连续请求之间的数据,然后这些请求被销毁 如果要保留TempData值,请使用 TempData.Keep(
TempData["hdn"] = "1";
内部控制器
如果我用这个
@{
var hdn = (string)TempData["hdn"];
}
在视图中,
TempData[“hdn”]
POST中获取null的值。如果我在视图中跳过此代码,它将在POST中持续存在。为什么会发生这种情况?TempData
与ViewData类似,但有所不同。它可以包含两个连续请求之间的数据,然后这些请求被销毁
如果要保留TempData
值,请使用
TempData.Keep()
例如:
var hdn= TempData["hdn"]; //it is marked for deletion
TempData.Keep("hdn"); //unmarked it
var hdnNotDeleted = TempData.Peek["hdn"];
读取TempData值后,会将其清除 如果希望在视图中读取值后将其返回控制器,则需要将其包含在隐藏字段中,然后从表单值中读取 比如:
<input type="hidden" name="hdn" value="@hdn" />
HTHA
TempData
键和值集在调用后将被删除。Satpal谈到了Keep,但如果您希望在每次检索它时都能明确说明而不删除它,那么也可以使用Peek
TempData.Peek(String)
例如:
var hdn= TempData["hdn"]; //it is marked for deletion
TempData.Keep("hdn"); //unmarked it
var hdnNotDeleted = TempData.Peek["hdn"];
如果控制器操作返回一个
ViewResult
,并且您试图将数据放入TempData
,
不要这样做。在这种情况下,请使用ViewData/ViewBag
。
TempData
意味着是一个非常短命的实例,您应该只在当前和后续请求期间使用它。由于TempData
是这样工作的,因此您需要确定下一个请求将是什么,并且重定向到另一个视图
是唯一可以保证这一点的时间。因此,使用TempData
可靠工作的唯一场景是重定向。所以请记住
有史以来最好的解释:您多久访问一次TempData
TempData
用于在调用之间保存内容,但一旦访问就会清除。(您可能希望将该值与查询参数一起传入,也可能希望提交表单)。(请参阅)这里有一个指针,指向有关在MVC中传递数据的更多信息: