Sunday, July 29, 2012

關於ASP.NET MVC的TempData

MSDN上對於ASP.NET MVC中的TempData解釋是:
Represents a set of data that persists only from one request to the next.
也就是一個暫存的資料,但只維持到下一個Request進來後就會被消滅。可是怎麼會知道下一個Request會何時進來?如果沒有更多的解釋,還真的令人很納悶TempData到底有什麼目的。

後來才發現他可以跟RedirectToAction配合。假設一個網站程式有兩個需要使用者填入不少資料的步驟,而且第二個步驟成功完成後才會將這些資料儲存到資料庫。這兩個步驟分為兩個Action,分別叫StepOne跟StepTwo。StepOne會Post資料到StepTwo,而StepTwo本身Post給自己後才將所有資料儲存。假設在StepTwo的Post發現了錯誤要把使用者導回StepOne更正錯誤,但希望在畫面上能保留使用者已輸入的資料。這時用RedirectToAction很有可能沒辦法把所有資料保留,

因為Redirect一定會是用Get的方法,而他傳輸資料量是有限的。

這就是TempData可以用到的地方,跟RedirectToAction配合。可以確定下一個Request會再回覆給瀏覽器後馬上再進來,而原本使用者輸入資料就全部保留在TempData中就可以在全部寫回到步驟1的網頁中。

其實在Session中可以自己做出TempData的功能,但已有內建這樣的功能,的確可以少寫不少程式,而且程式也更清楚。