Asp.Net Mvc: 淺析TempData機制

來源:互聯網
上載者:User

環境:

Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0

------------------------------------------------------------------------------

一. Asp.Net Mvc中的TempData

在Asp.Net Mvc架構的ControllerBase中存在一個叫做TempData的Property,它的類型為TempDataDictionary,顧名思義是一個字典類。TempData在Asp.Net Mvc中的作用是:可用於在Action執行過程之間傳值。簡單的說,你可以在執行某個Action的時候,將資料存放在TempData中,那麼在下一次Action執行過程中可以使用TempData中的資料。

如:

上面的代碼中,Index()給TempData添加了一個索引值對,假設我們先請求Index這個Action,接著請求Index2這個Action,那麼在Index2中,我們便可以得到之前添加到TempData的索引值對。有趣的是,這時如果再次請求Index2,那麼從TempData中讀到的MyName的值會是null。於是,我們需要瞭解TempData的生命週期。

二. TempData的生命週期

我們知道Http是無狀態的,為什麼TempData可以在兩次請求之前傳遞資料呢?很明顯,這個資料必定是已某種形式儲存了。查看Controller類的原始碼,很容易的找到了我們想要的東西:

從上面的代碼可以看出,每次在執行Action之前,都要調用一下TempData.Load()方法,執行完Action之後,再調用一下TempData.Save()方法。另外這裡還有一個重要成員TempDataProvider。

閱讀了相關原始碼之後,真相大白了。

TempData.Load()

TempData.Save()

TempDataProvider用於暫存資料。在TempData.Load()方法中,TempDataProvider中儲存的資料會被讀到TempData中,供Action調用過程中使用。Action執行完後,TempData.Save()所作的事情則是,移除TempData中任何沒有被更新的索引值對,然後再將TempData中的資料儲存,供下一次調用使用(註:也就是說,只有更新過的,以及新添加的索引值對才能再下次request中繼續使用)。為什麼TempData中的資料需要迅速被清除呢?很簡單,節約記憶體嘛。

三. ITempDataProvider

前面提到的TempDataProvider是Controller的一個Property,它的定義是這樣的:

這裡我們看到了一個預設實現的SessionStateTempDataProvider類。也就是說,預設情況下,Asp.Net Mvc通過SessionStateTempDataProvider來儲存TempData的資料。很明顯,資料是存在Session中的,也就是說,如果你禁用SessionState,那麼你的頁面就報異常了。

Asp.Net Mvc生來就是被設計為易擴充的,我們可以很容易通過實現自己的ITempDataProvider類來替換這個預設的SessionStateTempDataProvider。需要注意的是,TempDataProvider存放的資料必需具有使用者獨立性。

ITempDataProvider介面定義非常簡單:

在MvcFutures中,你也可以找到一個CookieTempDataProvider,提供了將TempData儲存在Cookie中的實現。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.