ASP.NET中有哪些頁面間數(shù)據(jù)傳遞的方法-創(chuàng)新互聯(lián)

ASP.NET中有哪些頁面間數(shù)據(jù)傳遞的方法,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為門源等服務(wù)建站,門源等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為門源企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

ASP.NET頁面間數(shù)據(jù)傳遞有幾種方法

遇到一個(gè)重要的問題是如何保證數(shù)據(jù)在頁面間進(jìn)行正確、安全和高效地傳送,Asp.net提供了狀態(tài)管理等多種技術(shù)來解決保存和傳遞數(shù)據(jù)問題,以下來探討.NET下的解決此問題的各種方法和各自的適用場(chǎng)合。

1、ASP.NET頁面間數(shù)據(jù)傳遞的各種方法和分析

1.1使用Querystring方法

QueryString也叫查詢字符串,這種方法將要傳遞的數(shù)據(jù)附加在網(wǎng)頁地址(URL)后面進(jìn)行傳遞。如頁面A.aspx跳轉(zhuǎn)到頁面B.aspx,可以用Request.Redirect("B.aspx?參數(shù)名稱=參數(shù)值")方法,也可以用超鏈接:,頁面跳轉(zhuǎn)后,在目標(biāo)頁面中可用Ruquest["參數(shù)名稱"]來接收參數(shù)。使用QuerySting方法的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,不使用服務(wù)器資源;缺點(diǎn)是傳遞的值會(huì)顯示在瀏覽器的地址欄上,有被篡改的風(fēng)險(xiǎn),不能傳遞對(duì)象,只有在通過URL請(qǐng)求頁時(shí)查詢字符串才是可行的。

1.2利用隱藏域

隱藏域不會(huì)顯示在用戶的瀏覽器中,一般是在頁面中加入一個(gè)隱藏控件,與服務(wù)器進(jìn)行交互時(shí)把值賦給隱藏控件并提交給下一頁面。隱藏域可以是任何存儲(chǔ)在網(wǎng)頁中的與網(wǎng)頁有關(guān)的信息的存儲(chǔ)庫。使用隱藏域存入數(shù)值時(shí)用:hidden控件.value=數(shù)值,取出接收數(shù)值時(shí)用:變量=hidden控件.value。使用隱藏域的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,隱藏域是標(biāo)準(zhǔn)的HTML控件,不需要復(fù)雜的編程邏輯。隱藏域在頁上存儲(chǔ)和讀取,不需要任何服務(wù)器資源,幾乎所有瀏覽器和客戶端設(shè)備都支持具有隱藏域的窗體。缺點(diǎn)是存儲(chǔ)結(jié)構(gòu)少,僅僅支持簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)量少,因?yàn)樗淮鎯?chǔ)在頁面本身,所以無法存儲(chǔ)較大的值,而且大的數(shù)據(jù)量會(huì)受到防火墻和代理的阻止。

1.3ViewState

ViewState是由ASP.NET頁面框架管理的一個(gè)隱藏的窗體字段。當(dāng)ASP.NET執(zhí)行某個(gè)頁面時(shí),該頁面上的ViewState值和所有控件將被收集并格式化成一個(gè)編碼字符串,然后被分配給隱藏窗體字段的值屬性。使用ViewState傳遞數(shù)據(jù)時(shí)可用:ViewState["變量名"]=數(shù)值,在取出數(shù)據(jù)時(shí)用:變量=ViewState["變量名"]。使用ViewState的優(yōu)點(diǎn)是:在對(duì)同一頁的多個(gè)請(qǐng)求間自動(dòng)保留值,不用服務(wù)器端資源,實(shí)現(xiàn)簡(jiǎn)單,視圖狀態(tài)中的值經(jīng)過哈希計(jì)算和壓縮,并且針對(duì)Unicode實(shí)現(xiàn)進(jìn)行編碼,其安全性要高于使用隱藏域;缺點(diǎn)是因?yàn)閂iewState存儲(chǔ)在頁面本身,因此如果

存儲(chǔ)較大的值,用戶顯示頁和發(fā)送頁時(shí)的速度可能會(huì)減慢。雖然視圖狀態(tài)以哈希格式存儲(chǔ)數(shù)據(jù),但它仍可以被篡改。

1.4使用Cookie

Cookie可以在頁面之間傳遞少量信息,可以存儲(chǔ)在客戶端的文本文件中,也可存儲(chǔ)在客戶端的內(nèi)存中。Cookie方法適用于存儲(chǔ)少量頁面中經(jīng)常改動(dòng)的信息,如為登陸過的網(wǎng)站保存登陸用戶名,為用戶輸入提供方便,還有在一些用戶自定義項(xiàng)目上保存用戶的個(gè)性化設(shè)置。使用Cookie傳遞數(shù)據(jù)時(shí)可用:Response.Cookies["鍵名"]=鍵值;取出數(shù)據(jù)用:變量名=Request.Cookies["鍵名"]。使用Cookie優(yōu)點(diǎn)是:Cookie存儲(chǔ)在客戶端,不使用服務(wù)器資源,實(shí)現(xiàn)簡(jiǎn)單,可配置到期時(shí)間。缺點(diǎn)是:可以存儲(chǔ)的數(shù)據(jù)量比較少,由于Cookie并不被所有的瀏覽器支持,而且還可能被用戶禁止或刪除,所以不能用于保存關(guān)鍵數(shù)據(jù)。另外,Cookie保存的形式是簡(jiǎn)單的明文文本,在它里面不宜保存敏感的、未加密的

數(shù)據(jù)。

1.5使用Application變量

使用Application變量也可以實(shí)現(xiàn)頁面間的傳值,Application變量是全局性的,所有用戶共享一個(gè)Application變量,一旦定義,它將影響到程序的所有部分。如果想在整個(gè)應(yīng)用程序范圍使用某個(gè)變量值A(chǔ)pplication對(duì)象將是很好的選擇。存入數(shù)據(jù)時(shí),把值添加到Application變量里:Application["變量名"]=數(shù)值;取出數(shù)據(jù)用:變量=Application["變量名"];在不需要使用該Application時(shí),要顯式清除它:Application["量名"]=null。

Application優(yōu)點(diǎn):易于使用,全局范圍??晒?yīng)用程序中的所有頁來訪問。缺點(diǎn):若保存數(shù)據(jù)的服務(wù)器端進(jìn)程被損壞(如因服務(wù)器崩潰、升級(jí)或關(guān)閉而損壞),那么數(shù)據(jù)就會(huì)丟失,所以利用Application一定要有保底的策略;占用服務(wù)器端的內(nèi)存,這可能會(huì)影響服務(wù)器的性能以及應(yīng)用程序的可伸縮性。

ASP.NET頁面間數(shù)據(jù)傳遞有幾種方法

1.6使用Session變量

Session對(duì)象可以用來存儲(chǔ)需要維護(hù)的指定對(duì)話的信息,不同的客戶端生成不同的Session對(duì)象。Session用于存儲(chǔ)特定于單獨(dú)會(huì)話的短期信息。Session的使用方法和格式與Application相同。

優(yōu)點(diǎn):易于實(shí)現(xiàn),并且提供較高的安全性和持久性,可以應(yīng)對(duì)IIS重啟和輔助進(jìn)程重啟,可在多進(jìn)程中使用。缺點(diǎn)是耗用服務(wù)器端的內(nèi)存。所以不要存儲(chǔ)大量的信息。Session最常見的用途是與Cookie一起向Web應(yīng)用程序提供用戶標(biāo)識(shí)功能,Session也可用于不支持Cookie的瀏覽器。但是,使用無Cookie的Session需要將會(huì)話標(biāo)識(shí)符放置在查詢字符串中,同樣會(huì)遇到本文在查詢字符串一節(jié)中陳述的安全問題。

1.7使用類的靜態(tài)屬性

這種方法是利用類的靜態(tài)屬性實(shí)現(xiàn)兩個(gè)頁面間的值傳。定義一個(gè)包含靜態(tài)屬性的類;將要傳送的值賦給靜態(tài)屬性;目標(biāo)頁面中可以通過靜態(tài)屬性獲得源頁面中要傳的值。

優(yōu)點(diǎn)是可以方便傳送多個(gè)數(shù)據(jù),缺點(diǎn)是需要額外編程,增加程序設(shè)計(jì)的工作量,占用服務(wù)器內(nèi)存。

1.8使用Server.Transfer

通過Server.Transfer方法把執(zhí)行流程從當(dāng)前的ASPX文件轉(zhuǎn)到同一服務(wù)器上的另一個(gè)ASPX頁面的同時(shí),可保留表單數(shù)據(jù)或查詢字符串,做法是把該方法的第二個(gè)參數(shù)設(shè)置成True,在第一個(gè)頁面用Server.Transfer("目標(biāo)頁面名.aspx",true);目標(biāo)頁面取出數(shù)據(jù)用:Ruquest.Form["控件名稱"]或Ruquest.QueryString["控件名稱"]。Asp.net2.0中還可以這樣來用,代碼如下:

雙擊代碼全選

1

PreviousPagepg1;2pg1=(PreviousPage)Context.Handler;3Response.Write(pg1.Name);

說明:此段代碼用在目標(biāo)頁面中取出傳遞的值,Previous-Page是原頁面的類名,Name是在原頁面定義的屬性,需要傳遞的數(shù)據(jù)存入到此屬性中。

使用這種方法,需要寫一些代碼以創(chuàng)建一些屬性以便可以在另一個(gè)頁面訪問它,可以在另一個(gè)頁面以對(duì)象屬性的方式來存取數(shù)值,這個(gè)方法在頁面間值傳遞中是特別有用的,這種方法不但簡(jiǎn)潔,同時(shí)又是面向?qū)ο蟮摹?/p>

1.9Cache

Cache具有強(qiáng)大的數(shù)據(jù)操作功能,以鍵值對(duì)集合的形式存儲(chǔ)數(shù)據(jù),可以通過指定關(guān)鍵字來插入和檢索數(shù)據(jù)項(xiàng)。它的基于依賴性的終止功能,使它能夠精確控制如何并及時(shí)更新和消除緩存中的數(shù)據(jù)。它可以內(nèi)部進(jìn)行鎖定管理,不需要象Application對(duì)象那樣使用Lock()和Unlock()方法進(jìn)行串行化管理。缺點(diǎn)是使用方法較復(fù)雜,使用不當(dāng)反而降低性能.

2、不同頁面跳轉(zhuǎn)情況下可采用的傳值方法

2.1情況一:源頁面可以跳轉(zhuǎn)到目標(biāo)頁面,源頁面?zhèn)鬟f數(shù)據(jù)給目標(biāo)頁面

使用查詢字符串,將少量信息從一頁傳輸?shù)搅硪豁撘约安淮嬖诎踩詥栴}時(shí),是一個(gè)簡(jiǎn)單常用的方法;使用Server.Transfer方法,可傳遞表單數(shù)據(jù)或查詢字符串到另一個(gè)頁面,還可以保存初始頁的HttpContext,當(dāng)目標(biāo)頁和源頁面在同一個(gè)服務(wù)器時(shí),可以用此方法。

2.2情況二:頁面?zhèn)鬟f數(shù)值給自身頁面

即在對(duì)同一頁的多個(gè)請(qǐng)求間保留值,ViewState屬性可提供具有基本安全性的功能。也可用隱藏域,存儲(chǔ)少量回發(fā)到自身或另一頁的頁信息時(shí)使用,不考慮安全性問題時(shí)使用。

2.3情況三:源頁面?zhèn)鬟f數(shù)值給目標(biāo)頁面,而源頁面不能直接連接到目標(biāo)頁面。

有多個(gè)方法,具體用哪個(gè)要看具體情況。

Application:存儲(chǔ)由多個(gè)用戶使用且更改不頻繁的全局信息,此時(shí)安全性不成為問題。不要存儲(chǔ)大量的信息。Session:存儲(chǔ)特定于單獨(dú)會(huì)話的短期信息,并且需要較高的安全性。不要在會(huì)話狀態(tài)中存儲(chǔ)大量的信息。需要注意,將為應(yīng)用程序中每一會(huì)話的生存期創(chuàng)建并維護(hù)會(huì)話狀態(tài)對(duì)象。在支持許多用戶的應(yīng)用程序中,這可能會(huì)占用大量服務(wù)器資源并影響可縮放性。

Cookie:當(dāng)您需要在客戶端存儲(chǔ)少量信息以及不存在安全性問題時(shí)使用。類的靜態(tài)屬性,方便傳送多個(gè)數(shù)據(jù)。

Cache:對(duì)象用于單個(gè)用戶、一組用戶或所有的用戶。可以為多個(gè)請(qǐng)求長(zhǎng)時(shí)間、高效率的保存數(shù)據(jù)。上述幾個(gè)方法,不僅用于情況三,前面兩種情況都可以使用,只是沒有必要時(shí)盡量少用,否則會(huì)造成資源浪費(fèi)或增加程序的復(fù)雜性。

看完上述內(nèi)容,你們掌握ASP.NET中有哪些頁面間數(shù)據(jù)傳遞的方法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前名稱:ASP.NET中有哪些頁面間數(shù)據(jù)傳遞的方法-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://bm7419.com/article38/cdiosp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)標(biāo)簽優(yōu)化、服務(wù)器托管網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)