TempData 生命週期

儲存到 TempData 的資料儲存在會話中,並將在訪問資料的第一個請求結束時自動刪除。如果從未讀過,它將一直保留到最後讀取或會話超時。

典型用法類似於以下序列(其中每行從不同的請求呼叫):

//first request, save value to TempData
TempData["value"] = "someValueForNextRequest";

//second request, read value, which 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

這種行為可以通過 PeekKeep 方法進一步控制。

  • 使用 Peek,你可以檢索儲存在 TempData 中的資料,而不會將其標記為刪除,因此將來的請求仍然可以使用資料

    //first request, save value to TempData
    TempData["value"] = "someValueForNextRequest";
    
    //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,你可以指定實際上應保留標記為刪除的金鑰。在這種情況下,檢索資料並將其儲存為刪除需要 2 個方法呼叫:

    //first request, save value to TempData
    TempData["value"] = "someValueForNextRequest";
    
    //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 取決於額外的邏輯。