九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Asp.net MVC 中的TempData對象的剖析

另一篇文章,也對TempData 做了很詳細的介紹,鏈接地址:https://www.jianshu.com/p/eb7a301bc536   。

  MVC中的 TempData 可以在Controller之間進行傳遞,如果使用過了之后,不管是在View里使用,還是在controller里使用,再次獲取就為Null 。因此,我們可以總結(jié)TempData對象有兩個特點。

  1:可以在Controller之間傳遞數(shù)據(jù)。

  2:只能使用一次,獲取數(shù)據(jù)后,再次獲取,得到的結(jié)果就是 Null 。

直接看源碼,就可以理解為什么會這樣。

  

在Controller調(diào)用Action方法之前,調(diào)用了PossiblyLoadTempData方法,執(zhí)行方法之后調(diào)用了PossiblySaveTempData方法

這兩個方法其實就是一個加載TempData數(shù)據(jù),一個保存TempData數(shù)據(jù)。

然后我們看一下TempData是什么

看到源碼之后,我們知道他是一個TempDataDictionary類型的屬性。

然后我們?nèi)タ?TempData.Load()和TempData.Save() 方法的源碼

通過源碼我們知道,他是通過ITempDataProvider的LoadTempData方法來加載數(shù)據(jù),SaveTempData方法來保存數(shù)據(jù)。因為ITempDataProvider是一個接口,所以我們要找到具體的實現(xiàn)類,所以我們就要找到調(diào)用這個Load和Save方法時傳入的是一個什么類型的值。

然后我們在類 SessionStateTempDataProvider中找到這兩個方法的具體實現(xiàn),有三個重要的地方我做了紅色標記。所以從源碼中我們可以知道,它是保存在了Session中,而且在Session里面讀取值,讀取成功后會Remove掉。這就解釋了它的第一個特點:可以在Controller之間傳遞數(shù)據(jù)。

  然后我們再看它為什么會有第二個特點:只能使用一次,獲取數(shù)據(jù)后,再次獲取,得到的結(jié)果就是 Null 。別的不啰嗦,直接上關鍵點。

在用索引器獲取到數(shù)據(jù)時,它都把HashSet<string>集合的 _initialKeys移除掉。然后我們再回頭去看TempData的Save方法。我再把源代碼截圖一次

arg_26_1就是個返回Bool類型的委托,這個委托的執(zhí)行結(jié)果 作為TempData移除數(shù)據(jù)的條件。因為_initialKeys這個集合在索引器獲取數(shù)據(jù)時移除了對應的key鍵,所以return !tempData._initialKeys.Contains(key) && !tempData._retainedKeys.Contains(key)就會返回true。所以就會從Dictionary字典中移除數(shù)據(jù)。

所以這就是TempData具有第二個特點的原因啦。

這里面還有一些細節(jié)不懂的溝通評論。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
白話學習MVC(七)Action的執(zhí)行一
淺析ASP.NET MVC中Controller與View數(shù)據(jù)傳遞
基于 Dojo toolkit 實現(xiàn) web2.0 的 MVC 模式
ASP.NET MVC: 構建不帶 Web 窗體的 Web 應用程序
從零開始學習 ASP.NET MVC 1.0 (四) View/Model 全解
ScottGu's Blog
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服