當在TempDataDictionary
的對象被讀取時,它會被標記爲在末端缺失的要求。
,如果你把東西對TempData的像
TempData["value"] = "someValueForNextRequest";
而且你訪問另一個請求,該值將在那裏,但只要你讀它,價值會被標記爲刪除這意味着:
//second request, read value and is marked for deletion
object value = TempData["value"];
//third request, value is not there as it was deleted at the end of the second request
TempData["value"] == null
的Peek
和Keep
方法,使您無需將其標記爲刪除讀取值。假設我們回到第一個請求的值被保存到TempData。
隨着Peek
你得到的值,而不將其標記爲單次調用刪除,請參閱msdn:
//second request, PEEK value so it is not deleted at the end of the request
object value = TempData.Peek("value");
//third request, read value and mark it for deletion
object value = TempData["value"];
隨着Keep
你指定被標記爲要保留刪除的關鍵。檢索對象並稍後保存以免被刪除是兩個不同的調用。見msdn
//second request, get value marking it from deletion
object value = TempData["value"];
//later on decide to keep it
TempData.Keep("value");
//third request, read value and mark it for deletion
object value = TempData["value"];
您可以使用Peek
時,你總是希望保留另一個請求的值。保留該值時使用Keep
取決於附加邏輯。
你有2個約TempData的工作原理here好的問題和here
希望它能幫助!
非常感謝!它現在超級清晰:) –
什麼時候刪除實際發生?因此,如果在閱讀之後標記爲刪除,然後我做了其他一些操作,並決定使用保留,只要我發起了重定向,它會保證在哪裏? – eaglei22
在執行結果和所有過濾器後,它將在當前請求結束時被刪除。只要你使用[base controller class](https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/Controller.cs),檢查'TempData.Save'的用法那麼 –