在 ASP.NET MVC 2 中,条目的生命周期TempDataDictionary
只是一个 HTTP 请求。
这转化为在一个请求中设置一个值、重定向并访问该行另一端的相同项目。在此之后,该条目将不再可用,无论您是否在行末从字典中读取该值。
自 ASP.NET MVC 3(我相信)以来,这个实现细节发生了相当大的变化。
中的条目TempDataDictionary
现在只有在阅读后才会被删除。
MVC 4
public object this[string key]
{
get
{
object obj;
if (!this.TryGetValue(key, out obj))
return (object) null;
this._initialKeys.Remove(key);
return obj;
}
}
和
public bool TryGetValue(string key, out object value)
{
this._initialKeys.Remove(key);
return this._data.TryGetValue(key, out value);
}
MVC 2:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
return value;
}
return null;
}
和
public bool TryGetValue(string key, out object value) {
return _data.TryGetValue(key, out value);
}
由于大多数人似乎在一个请求中将项目放入TempData
集合中,并在下一个请求中立即将它们读回,因此功能似乎大致相同。
在情况并非如此的情况下,例如希望在TempData
重定向到一个位置时读取条目,并希望在请求其他资源并导航回来时将其删除,此更改会产生相当大的影响。
该条目不再可用于一个 http 请求,而是可用于许多 HTTP 请求,即使它仅可用于字典上的单个 get。
我想更多地了解这种实施变化,变化的原因是什么,这仅仅是为了迎合多个重定向还是有更深层次的好处?
其次,我很想知道是否有什么内置的东西现在可以像TempData
过去一样满足单个 HTTP 请求共享数据的需求?