日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
淺析ASP.NETMVC中的TempData機制

開發(fā)環(huán)境:Windows 2008, VS 2008 SP1, ASP.NET MVC 1.0

創(chuàng)新互聯專注于延吉企業(yè)網站建設,成都響應式網站建設公司,電子商務商城網站建設。延吉網站建設公司,為延吉等地區(qū)提供建站服務。全流程按需定制網站,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯專業(yè)和態(tài)度為您提供的服務

一. ASP.NET MVC中的TempData

在ASP.NET MVC框架的ControllerBase中存在一個叫做TempData的Property,它的類型為TempDataDictionary,顧名思義是一個字典類。TempData在ASP.NET MVC中的作用是:可用于在Action執(zhí)行過程之間傳值。簡單的說,你可以在執(zhí)行某個Action的時候,將數據存放在TempData中,那么在下一次Action執(zhí)行過程中可以使用TempData中的數據。

如:

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

二. TempData的生命周期

我們知道Http是無狀態(tài)的,為什么TempData可以在兩次請求之前傳遞數據呢?很明顯,這個數據必定是已某種形式保存了。查看Controller類的源代碼,很容易的找到了我們想要的東西:

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

閱讀了相關源代碼之后,真相大白了。

TempData.Load()

TempData.Save()

TempDataProvider用于暫存數據。在TempData.Load()方法中,TempDataProvider中保存的數據會被讀到TempData中,供Action調用過程中使用。Action執(zhí)行完后,TempData.Save()所作的事情則是,移除TempData中任何沒有被更新的鍵值對,然后再將TempData中的數據保存,供下一次調用使用(注:也就是說,只有更新過的,以及新添加的鍵值對才能再下次request中繼續(xù)使用)。為什么TempData中的數據需要迅速被清除呢?很簡單,節(jié)約內存嘛。

三. ITempDataProvider

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

這里我們看到了一個默認實現的SessionStateTempDataProvider類。也就是說,默認情況下,ASP.NET MVC通過SessionStateTempDataProvider來保存TempData的數據。很明顯,數據是存在Session中的,也就是說,如果你禁用SessionState,那么你的頁面就報異常了。

ASP.NET MVC生來就是被設計為易擴展的,我們可以很容易通過實現自己的ITempDataProvider類來替換這個默認的SessionStateTempDataProvider。需要注意的是,TempDataProvider存放的數據必需具有用戶獨立性。

ITempDataProvider接口定義非常簡單:

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


網頁名稱:淺析ASP.NETMVC中的TempData機制
轉載注明:http://www.5511xx.com/article/dhdcedd.html