【问题标题】:TempData value not persisting if used in view如果在视图中使用,TempData 值不会持续存在
【发布时间】:2013-08-28 11:53:43
【问题描述】:
我正在使用
TempData["hdn"] = "1";
在控制器中
如果我用这个
@{
var hdn = (string)TempData["hdn"];
}
在视图中,TempData["hdn"] 在 POST 中获取 null 值。如果我在视图中跳过此代码,它会在 POST 中持续存在。为什么会这样?
【问题讨论】:
标签:
asp.net-mvc-4
tempdata
【解决方案1】:
TempData 值在读取后被清除。
如果您希望在视图中读取该值后将其返回到控制器中,则需要将其包含在隐藏字段中,然后从表单值中读出。
类似:
<input type="hidden" name="hdn" value="@hdn" />
然后在你的控制器中,你可以这样做:
var hdn = Request.Form["hdn"]
HTH
【解决方案2】:
TempData 类似于 ViewData 但有区别。它可以包含两个连续请求之间的数据,之后它们被销毁。
如果你想保持TempData的价值使用
TempData.Keep()
例子:
var hdn= TempData["hdn"]; //it is marked for deletion
TempData.Keep("hdn"); //unmarked it
MSDN Docs for Keep
【解决方案3】:
TempData 键值集在被调用后将被删除。 Satpal 谈到了 Keep,但如果您想明确说明每次想要检索它而不删除它,您也可以使用 Peek。
TempData.Peek(String)
例子:
var hdnNotDeleted = TempData.Peek["hdn"];
MSDN Documentation for Peek