今天就跟大家聊聊有關(guān)ASP.NET MVC中TempData機(jī)制的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)頁(yè)設(shè)計(jì),高端網(wǎng)頁(yè)制作,對(duì)成都門簾等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化推廣哪家好,專業(yè)seo優(yōu)化優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。
一. ASP.NET MVC中的TempData
在ASP.NET MVC框架的ControllerBase中存在一個(gè)叫做TempData的Property,它的類型為TempDataDictionary,顧名思義是一個(gè)字典類。TempData在ASP.NET MVC中的作用是:可用于在Action執(zhí)行過(guò)程之間傳值。簡(jiǎn)單的說(shuō),你可以在執(zhí)行某個(gè)Action的時(shí)候,將數(shù)據(jù)存放在TempData中,那么在下一次Action執(zhí)行過(guò)程中可以使用TempData中的數(shù)據(jù)。
如:
上面的代碼中,Index()給TempData添加了一個(gè)鍵值對(duì),假設(shè)我們先請(qǐng)求Index這個(gè)Action,接著請(qǐng)求Index2這個(gè)Action,那么在Index2中,我們便可以得到之前添加到TempData的鍵值對(duì)。有趣的是,這時(shí)如果再次請(qǐng)求Index2,那么從TempData中讀到的MyName的值會(huì)是null。于是,我們需要了解TempData的生命周期。
二. TempData的生命周期
我們知道Http是無(wú)狀態(tài)的,為什么TempData可以在兩次請(qǐng)求之前傳遞數(shù)據(jù)呢?很明顯,這個(gè)數(shù)據(jù)必定是已某種形式保存了。查看Controller類的源代碼,很容易的找到了我們想要的東西:
從上面的代碼可以看出,每次在執(zhí)行Action之前,都要調(diào)用一下TempData.Load()方法,執(zhí)行完Action之后,再調(diào)用一下TempData.Save()方法。另外這里還有一個(gè)重要成員TempDataProvider。
閱讀了相關(guān)源代碼之后,真相大白了。
TempData.Load()
TempData.Save()
TempDataProvider用于暫存數(shù)據(jù)。在TempData.Load()方法中,TempDataProvider中保存的數(shù)據(jù)會(huì)被讀到TempData中,供Action調(diào)用過(guò)程中使用。Action執(zhí)行完后,TempData.Save()所作的事情則是,移除TempData中任何沒(méi)有被更新的鍵值對(duì),然后再將TempData中的數(shù)據(jù)保存,供下一次調(diào)用使用(注:也就是說(shuō),只有更新過(guò)的,以及新添加的鍵值對(duì)才能再下次request中繼續(xù)使用)。為什么TempData中的數(shù)據(jù)需要迅速被清除呢?很簡(jiǎn)單,節(jié)約內(nèi)存嘛。
三. ITempDataProvider
前面提到的TempDataProvider是Controller的一個(gè)Property,它的定義是這樣的:
這里我們看到了一個(gè)默認(rèn)實(shí)現(xiàn)的SessionStateTempDataProvider類。也就是說(shuō),默認(rèn)情況下,ASP.NET MVC通過(guò)SessionStateTempDataProvider來(lái)保存TempData的數(shù)據(jù)。很明顯,數(shù)據(jù)是存在Session中的,也就是說(shuō),如果你禁用SessionState,那么你的頁(yè)面就報(bào)異常了。
ASP.NET MVC生來(lái)就是被設(shè)計(jì)為易擴(kuò)展的,我們可以很容易通過(guò)實(shí)現(xiàn)自己的ITempDataProvider類來(lái)替換這個(gè)默認(rèn)的SessionStateTempDataProvider。需要注意的是,TempDataProvider存放的數(shù)據(jù)必需具有用戶獨(dú)立性。
ITempDataProvider接口定義非常簡(jiǎn)單:
看完上述內(nèi)容,你們對(duì)ASP.NET MVC中TempData機(jī)制的原理是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。