2009-05-22 69 views
6

從我讀到的內容來看,當前請求和下一個請求(以便您可以通過重定向傳遞信息)將放置在TempData中。問題是如果我瀏覽到一個不重定向的控制器動作,那麼TempData中的信息仍然會出現在下一個請求中。我使用TempData存儲顯示給用戶的信息性消息,所以現在我也在第二個屏幕上獲取第一個屏幕的消息。ASP.NET MVC:控制器方法執行後清除TempData

在控制器生命週期中,有沒有一段時間清除TempData,一旦它不再被使用?

回答

7

Use ViewData instead of TempData if you are not redirecting。你永遠不需要手動清除TempData。如果您只在重定向時使用它,它會自動並在正確的時間爲您清除。

+0

但是如果我的控制器動作_is_重定向?在這種情況下,我無法使用ViewData,因爲消息不再存在。 有沒有更好的方式來處理這樣的顯示消息,而不是將它存儲在TempData/ViewData中? – 2009-05-22 17:18:00

+0

當您重定向時,您需要使用ViewData,而在重定向時需要使用TempData。在這兩種情況下,一切都是自動的。要顯示你,然後寫 TempData [「key」] ?? ViewData [「key」] 在您的視圖中。 – 2009-05-22 17:23:21

0

我想你應該使用ViewData,如果你不使用POST-REDIRECT-GET。但如果你真的需要的行爲你所描述上面,你應該創建自己的定製TempDataProvider:

public class YourTempDataProvider : SessionStateTempDataProvider 
{ 
    public override void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values) 
    { 
     bool redirecting = ... 

     if(redirecting) 
     { 
      base.SaveTempData(controllerContext, values); 
     } 
    } 
} 
0

我不會找一個地方在這裏,比定製TempDataProvider等。但這很棘手。如果你想要在其他控制器中的常規行爲呢?我現在就是YAGNI,只是清除它,你需要清除它。當你注意到一個圖案時,你可以將它拉到一些平常的地方。