在ASP.NET MVC 2,在TempDataDictionary
條目的壽命只是一個HTTP請求。TempData的實施變化 - 變化的原因
即轉換爲在一個請求中設置的值,重新定向,並具有在所述線的另一端訪問相同的項目。在此之後,無論您是否從字典的最後一行讀取該值,該條目都將不再可用。
因爲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請求,無論是隻適用於一個單一得到的字典。
我想更多地瞭解這個執行力度的變化,什麼是對變化的原因,是這僅僅是爲了滿足多重定向,還是有更深層次的好處?
除此之外,我很想知道是否有內置的東西可以滿足單個HTTP請求共享數據的需求,這與TempData
用於滿足的方式相同?
爲什麼不將MVC2'TempData'複製到您自己的實現中? – 2013-02-17 20:29:15
我們基本上有。 – 2013-02-18 08:34:31