asp.net 頁面間數(shù)據(jù)傳遞方法
來源:易賢網(wǎng) 閱讀:681 次 日期:2014-10-21 09:13:07
溫馨提示:易賢網(wǎng)小編為您整理了“asp.net 頁面間數(shù)據(jù)傳遞方法”,方便廣大網(wǎng)友查閱!

0、引言

web 頁面是無狀態(tài)的, 服務(wù)器對每一次請求都認(rèn)為來自不同用戶,因此,變量的狀態(tài)在連續(xù)對同一頁面的多次請求之間或在頁面跳轉(zhuǎn)時不會被保留。在用asp.net 設(shè)計開發(fā)一個web系統(tǒng)時, 遇到一個重要的問題是如何保證數(shù)據(jù)在頁面間進(jìn)行正確、安全和高效地傳送,asp.net 提供了狀態(tài)管理等多種技術(shù)來解決保存和傳遞數(shù)據(jù)問題,以下來探討.net 下的解決此問題的各種方法和各自的適用場合。

1、數(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)點是實現(xiàn)簡單, 不使用服務(wù)器資源;缺點是傳遞的值會顯示在瀏覽器的地址欄上,有被篡改的風(fēng)險,不能傳遞對象,只有在通過url 請求頁時查詢字符串才是可行的。

1.2 利用隱藏域

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

1.3 viewstate

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

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

1.4 使用cookie

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

數(shù)據(jù)。

1.5 使用application 變量

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

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

1.6 使用session 變量

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

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

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

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

優(yōu)點是可以方便傳送多個數(shù)據(jù),缺點是需要額外編程,增加

程序設(shè)計的工作量,占用服務(wù)器內(nèi)存。

1.8 使用server.transfer

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

previouspage pg1;

pg1=(previouspage)context.handler;

response.write(pg1.name);

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

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

1.9 cache

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

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

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

使用查詢字符串, 將少量信息從一頁傳輸?shù)搅硪豁撘约安?存在安全性問題時,是一個簡單常用的方法;使用server.transfer方法,可傳遞表單數(shù)據(jù)或查詢字符串到另一個頁面,還可以 保存初始頁的httpcontext, 當(dāng)目標(biāo)頁和源頁面在同一個服務(wù)器 時,可以用此方法。

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

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

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

有多個方法,具體用哪個要看具體情況。

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

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

cache :對象用于單個用戶、一組用戶或所有的用戶??梢詾槎鄠€請求長時間、高效率的保存數(shù)據(jù)。上述幾個方法, 不僅用于情況三, 前面兩種情況都可以使用,只是沒有必要時盡量少用,否則會造成資源浪費(fèi)或增加程序的復(fù)雜性。

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:asp.net 頁面間數(shù)據(jù)傳遞方法
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)