本文我們將討論的是asp.net頁面間資料傳遞的幾種方法,對此希望能協助大家正確的理解ASP.NET頁面間資料傳遞的用處以及便利性。
1、引言
Web頁面是無狀態的,
伺服器對每一次請求都認為來自不同使用者,因此,變數的狀態在連續對同一頁面的多次請求之間或在頁面跳轉時不會被保留。在用ASP.NET 設計開發一個Web系統時, 遇到一個重要的問題是如何保證資料在頁面間進行正確、安全和高效地傳送,Asp.net 提供了狀態管理等多種技術來解決儲存和傳遞資料問題,以下來探討。NET 下的解決此問題的各種方法和各自的適用場合。
2、ASP.NET頁面間資料傳遞的各種方法和分析
1)使用Querystring 方法
QueryString 也叫查詢字串, 這種方法將要傳遞的資料附加在網頁地址(URL)後面進行傳遞。如頁面A.aspx 跳轉到頁面B.aspx,可以用Request.Redirect("B.aspx?參數名稱=參數值")方法,也可以用超連結:,頁面跳轉後,在目標頁面中可用Ruquest["參數名稱"]來接收參數。使用QuerySting 方法的優點是實現簡單, 不使用伺服器資源;缺點是傳遞的值會顯示在瀏覽器的地址欄上,有被篡改的風險,不能傳遞對象,只有在通過URL
請求頁時查詢字串才是可行的。
2)利用隱藏欄位
隱藏欄位不會顯示在使用者的瀏覽器中, 一般是在頁面中加入一個隱藏控制項, 與伺服器進行互動時把值賦給隱藏控制項並提交給下一頁面。隱藏欄位可以是任何儲存在網頁中的與網頁有關的資訊的存放庫。使用隱藏欄位存入數值時用:hidden 控制項。value=數值,取出接收數值時用:變數=hidden 控制項。value。使用隱藏欄位的優點是實現簡單, 隱藏欄位是標準的HTML 控制項,不需要複雜的編程邏輯。隱藏欄位在頁上儲存和讀取,不需要任何伺服器資源,幾乎所有瀏覽器和用戶端裝置都支援具有隱藏欄位的表單。缺點是儲存結構少,僅僅支援簡單的資料結構,儲存量少,因為它被儲存在頁面本身,所以無法儲存較大的值,而且大的資料量會受到防火牆和代理的阻止。
3)ViewState
ViewState 是由ASP.NET 頁面架構管理的一個隱藏的表單欄位。當ASP.NET 執行某個頁面時,該頁面上的ViewState 值和所有控制項將被收集並格式化成一個編碼字串, 然後被分配給隱藏表單欄位的值屬性。使用ViewState 傳遞資料時可用:ViewState [" 變數名"]=數值,在取出資料時用:變數=ViewState["變數名"]。使用ViewState 的優點是:在對同一頁的多個請求間自動保留值,不用伺服器端資源,實現簡單,檢視狀態中的值經過雜湊計算和壓縮,並且針對Unicode
實現進行編碼,其安全性要高於使用隱藏欄位;缺點是因為ViewState 儲存在頁面本身,因此如果
儲存較大的值,使用者顯示頁和發送頁時的速度可能會減慢。雖然檢視狀態以雜湊格式儲存資料,但它仍可以被篡改。
4)使用Cookie
Cookie 可以在頁面之間傳遞少量資訊, 可以儲存在用戶端的文字檔中,也可儲存在用戶端的記憶體中。Cookie 方法適用於儲存少量頁面中經常改動的資訊, 如為登陸過的網站儲存登陸使用者名稱,為使用者輸入提供方便,還有在一些使用者自訂項目上儲存使用者的個人化。使用Cookie傳遞資料時可用:Response.Cookies["鍵名"]=索引值;取出資料用:變數名=Request.Cookies["鍵名"]。使用Cookie
優點是:Cookie 儲存在用戶端, 不使用伺服器資源,實現簡單,可配置到期時間。缺點是:可以儲存的資料量比較少,由於Cookie 並不被所有的瀏覽器支援,而且還可能被使用者禁止或刪除,所以不能用於儲存關鍵資料。另外,Cookie 儲存的形式是簡單的明文文本,在它裡面不宜儲存敏感的、未加密的 資料。
5)使用application 變數
使用Application 變數也可以實現頁面間的傳值,Application變數是全域性的,所有使用者共用一個Application 變數,一旦定義,它將影響到程式的所有部分。如果想在整個應用程式範圍使用某個變數值Application 對象將是最佳的選擇。存入資料時, 把值添加到Application 變數裡:Application["變數名"]=數值;取出資料用:變數=Application["變數名"];在不需要使用該Application
時,要顯式清除它:Application["量名"]=null。
Application 優點:便於使用,全域範圍。可供應用程式中的所有頁來訪問。缺點:若儲存資料的伺服器端進程被損壞(如因伺服器崩潰、升級或關閉而損壞),那麼資料就會丟失,所以利用Application 一定要有保底的策略;佔用伺服器端的記憶體,這可能會影響伺服器的效能以及應用程式的延展性。