ASP.NET MVC做浏览器刷新使TempData无用吗?

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)