Mys*_*ter 7 asp.net-mvc tempdata
如果我重定向到通过TempData初始化页面的新页面,它可以正常工作,但是如果用户按下浏览器中的刷新按钮,TempData将不再可用.鉴于此,是否存在TempData可靠使用的情况?
或者以任何方式消除或缓解用户刷新的问题?
cem*_*ara 20
你应该写
TempData.Keep("nameofthedata");
Run Code Online (Sandbox Code Playgroud)
在你的控制器中,它也会在刷新情况下保持这些数据.
Joh*_*ell 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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13373 次 |
| 最近记录: |