如果我重定向到通过TempData初始化页面的新页面,它可以正常工作,但是如果用户在浏览器中按下刷新按钮,则TempData不再可用。 鉴于此,是否存在TempData可靠使用的情况? 或者以任何方式消除或缓解用户刷新的问题?
答案 0 :(得分:19)
你应该写
TempData.Keep("nameofthedata");
在您的控制器中,它也会将数据保存在刷新情况中。
答案 1 :(得分:13)
在MVC 1中,是的,存储密钥后,下一个请求后临时数据会丢失。
然而,对于MVC 2,临时数据在第一次尝试访问它后就会丢失。
您始终可以使用TempData使用的Session来解决您遇到的临时数据丢失问题。
来自MVC 2 Beta发行说明:
TempDataDictionary改进
TempDataDictionary的行为 班级已略有改变 解决临时数据的场景 或者过早地移除或者 持续时间超过必要时间。对于 例如,在临时数据的情况下 在同一个请求中读取它 设置,临时数据持续存在 即使是下一个请求 意图是删除它。其他 例如,临时数据没有持久化 跨多个连续重定向。
要解决这些问题,请 TempDataDictionary类已更改 这样所有的钥匙都能存活下来 无限期地直到读取密钥 来自TempDataDictionary对象。 Keep方法已添加到 TempDataDictionary让你指明 不应删除该值 看完之后。该 RedirectToActionResult就是一个例子 调用Keep方法的位置 为了保留所有的钥匙 下一个请求。
您还可以直接查看MVC 2来源以查看这些更改:
MVC 1:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
return value;
}
return null;
}
set {
_data[key] = value;
_modifiedKeys.Add(key);
}
}
MVC 2:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
_initialKeys.Remove(key);
return value;
}
return null;
}
set {
_data[key] = value;
_initialKeys.Add(key);
}
}
答案 2 :(得分:2)
MVC1中给定情况的解决方法是在第二个控制器中重新分配TempData。当然,它会使系统中的数据持续更长时间。但它修复了刷新问题。
答案 3 :(得分:1)
Tempdata用于重定向,因此如果您刷新页面意味着您正在向服务器发出单独的请求,那么这就是数据丢失的原因。要保留此数据,请在要重定向的操作中调用Tempdata.Keep(“KeyofTempdata”)方法。如果要删除数据,请使用Tempdata.Remove(“KeyofTempdata”)。
答案 4 :(得分:0)
可以解决您问题的唯一功能是Cache
和Session
。
ViewData
在生成视图时基本上“死掉”。
如果您可以提供有关您要完成的内容的更多详细信息,则可能会提供其他解决方案,但是,对您而言,最佳选择似乎是使用Session
或Cache
。< / p>
答案 5 :(得分:-1)
TempData专门用于存储仅一页加载/操作/重定向的数据。如果您需要在刷新后保留数据,则应将其放在ViewData集合中,只要为刷新请求提供的操作与最初请求的操作相同(即,在重定向之前未添加ViewData值)