1. Get(即使用QueryString顯式傳遞)
方式:在url后面跟參數(shù)。
特點(diǎn):簡(jiǎn)單、方便。
缺點(diǎn):字符串長(zhǎng)度最長(zhǎng)為255個(gè)字符;數(shù)據(jù)泄漏在url中。
適用數(shù)據(jù):簡(jiǎn)單、少量、關(guān)鍵的數(shù)據(jù)。
適用范圍:傳遞給自己、傳遞給另一個(gè)目標(biāo)頁(yè)面;常用于2個(gè)頁(yè)面間傳遞數(shù)據(jù)。
用法:例如:url后加?UserID=…,跳轉(zhuǎn)到目標(biāo)頁(yè)面,目標(biāo)頁(yè)面在伺服端可用Request.QueryString["InputText"]獲取其指定參數(shù)值。
2. Post
方式:通用的方式。利用form提交。
特點(diǎn):最常用的方法。常用技巧是把隱秘的數(shù)據(jù)存在隱藏域中由form提交。
適用數(shù)據(jù):大量數(shù)據(jù),包括文件上傳。
適用范圍:同Get方法
用法:在客戶端form指定action目標(biāo)后submit、在asp.net的伺服端中使用server.Transfer(url)提交;在伺服端中用Request.Form["FormFieldID"]獲取。
3. 頁(yè)面對(duì)象的屬性
方式:asp.net特有方式 。利用HttpContext獲取發(fā)請(qǐng)求的頁(yè)面的信息。
特點(diǎn):可以直接存儲(chǔ)對(duì)象。
缺點(diǎn):注意強(qiáng)制轉(zhuǎn)換的類型要正確。
適用數(shù)據(jù):各種數(shù)據(jù)。
適用范圍:頁(yè)面之間傳遞復(fù)雜數(shù)據(jù)。
用法:獲取Context.Handler將其轉(zhuǎn)換為發(fā)請(qǐng)求的頁(yè)面的實(shí)例,隨后就可以輕松訪問其form中的字段、甚至屬性。其中的Context是指HttpContext對(duì)象,Handler是其屬性,Context.Handler的意思可以理解為創(chuàng)建源頁(yè)類的實(shí)例變量,而得到此實(shí)例之后,就可以直接訪問其中的屬性和Public方法了。
4. cookie
方式:將數(shù)據(jù)存在客戶端的經(jīng)典方法。
缺點(diǎn):安全性低、受客戶端設(shè)置限制、一個(gè)站點(diǎn)僅存20個(gè)cookie,每個(gè)容量4096字節(jié)。
有效期:自定義或被用戶清除
適用數(shù)據(jù):用戶的會(huì)話數(shù)據(jù)(一般是用戶名,用戶的個(gè)性化設(shè)置信息等)
適用范圍:?jiǎn)蝹€(gè)用戶、整個(gè)站點(diǎn)所有頁(yè)面
用法:引用Request.Cookies(讀取信息)、Response.Cookies(寫入信息)、或用HttpCookieCollection直接創(chuàng)建Cookie對(duì)象。
5. Session
方式:將用戶數(shù)據(jù)存儲(chǔ)在伺服端。
特點(diǎn):asp.net中可以設(shè)置session的存儲(chǔ)方式、位置、SessionID的保存是否依賴cookie。
可以直接存儲(chǔ)對(duì)象。
缺點(diǎn):asp.net中有失效的隱患
有效期:用戶活動(dòng)時(shí)間+自定義延遲。
適用數(shù)據(jù):用戶的特有信息。
適用范圍:?jiǎn)蝹€(gè)用戶、整個(gè)站點(diǎn)所有頁(yè)面。
用法:Session["CollectionName"] = value/object;
6. Cache
方式:將用戶數(shù)據(jù)存儲(chǔ)在伺服端數(shù)據(jù)緩存中。
特點(diǎn):可以大大提高效率。 可以直接存儲(chǔ)對(duì)象。
缺點(diǎn):數(shù)據(jù)更新不及時(shí)。
有效期:應(yīng)用程序生命周期或自定義。
適用數(shù)據(jù):所有頁(yè)面、所有用戶都可以共享的數(shù)據(jù)。
用法:Cache["CollectionName"] = value|object;
7. Appliction
方式: 將數(shù)據(jù)存儲(chǔ)于此,相當(dāng)于全局變量。
特點(diǎn):可以直接存儲(chǔ)對(duì)象。整個(gè)站點(diǎn)的共享數(shù)據(jù)。
有效期:應(yīng)用程序生命周期。
適用數(shù)據(jù):所有頁(yè)面、所有用戶共享的數(shù)據(jù)。
用法:Appliction["CollectionName"] = value|object;
8. ViewState
方式:asp.net特有機(jī)制,用來恢復(fù)頁(yè)面狀態(tài)。
特點(diǎn):將頁(yè)面各控件及其所存數(shù)據(jù)序列化存在name為_ViewState的隱藏域中。
缺點(diǎn):存在HTML中,安全性較低??梢栽O(shè)置加密和驗(yàn)證,但數(shù)據(jù)量會(huì)大增、效率有影響。
適用數(shù)據(jù):頁(yè)面PostBack需要保存的數(shù)據(jù),數(shù)據(jù)太大會(huì)影響頁(yè)面發(fā)送效率。
適用范圍:頁(yè)面自身數(shù)據(jù)保存。
用法:ViewState["CollectionName"] = value;
9. Static
方式: 將數(shù)據(jù)存于靜態(tài)變量中。
特點(diǎn):利于提高效率。
缺點(diǎn):若用不好會(huì)致使用戶或頁(yè)面間數(shù)據(jù)紊亂,造成極大的隱患。建議只賦值一次,絕對(duì)禁止為單個(gè)用戶而更改此值。
適用數(shù)據(jù):所有用戶共享的數(shù)據(jù)。
適用范圍:此類所有的頁(yè)面實(shí)例。
用法:在class中聲明靜態(tài)變量。
整理:
頁(yè)面自身保存數(shù)據(jù)可用的有ViewState,static變量。
頁(yè)面之間傳遞數(shù)據(jù)常用get,post,HttpContext,當(dāng)然可以變通一下用于自身數(shù)據(jù)保存。
單用戶的所有頁(yè)面數(shù)據(jù)共享常用session,cookie,當(dāng)然也可以應(yīng)用在以上兩種情況。
整個(gè)應(yīng)用程序(所有用戶所用頁(yè)面)的數(shù)據(jù)共享常用Appliction,cache,static變量。
總結(jié):
當(dāng)然可以變通下靈活應(yīng)用來解決問題,但是要選擇合適的,常見到濫用Get和Session。
建議在用Request的時(shí)候要指明所取的集合,比如Get方法傳來的參數(shù)從QueryString集合取,Post的從Form取,cookie從Cookies里取。雖然用Request[]集合,以上幾種都可以取到,但是卻造成性能上的浪費(fèi),本來直接在Form集合中,卻遍歷了QueryString,Form,Cookies等集合才取出來。
ps:在計(jì)算機(jī)的世界里,凡是提供服務(wù)的一方我們稱為伺服端(server),而接受服務(wù)的另一方我們稱作客戶端(client)。
您可能感興趣的文章:- IOS 應(yīng)用之間的跳轉(zhuǎn)和數(shù)據(jù)傳遞詳解
- Vuejs第九篇之組件作用域及props數(shù)據(jù)傳遞實(shí)例詳解
- 深入淺析JavaScript中數(shù)據(jù)共享和數(shù)據(jù)傳遞
- Android開發(fā)之利用Intent實(shí)現(xiàn)數(shù)據(jù)傳遞的方法
- 基于startActivityForResult方法處理兩個(gè)Activity之間數(shù)據(jù)傳遞問題
- Android實(shí)現(xiàn)Activities之間進(jìn)行數(shù)據(jù)傳遞的方法
- Ruby on Rails中MVC結(jié)構(gòu)的數(shù)據(jù)傳遞解析
- jQuery學(xué)習(xí)筆記之 Ajax操作篇(二) - 數(shù)據(jù)傳遞
- 解析activity之間數(shù)據(jù)傳遞方法的詳解
- 深入理解Activity之間的數(shù)據(jù)傳遞
- WinForm中窗體間的數(shù)據(jù)傳遞交互的一些方法
- Ajax中數(shù)據(jù)傳遞的另一種模式 javascript Object Notation思想(JSON)
- ASP.NET 頁(yè)面間數(shù)據(jù)傳遞方法小結(jié)
- C#中數(shù)據(jù)的傳遞以及ToolStripProgressBar