Ⅰ 如何在頁面之間傳遞變數
(1)Session
(2)Cookie
(3)Application
(4)URL地址中的參數
(5)通過隱藏欄位來傳遞數據
(6)Server.Transfer
(7)通過序列化對象
(8)........
下面就分別一一介紹:
(1)使用Session
session對象是用來記錄瀏覽器端的變數,是個別瀏覽器端專用的變數,對於每一個瀏覽器訪問時都會自動產生一個seseion對象,該對象提供一個存儲場所,用來存儲僅僅對該訪問者在會話的活動期間打開的網頁可用的變數和對象。這樣就用可以用來在Web間傳遞專對單個瀏覽器端使用的數據。其定義方法:session(「變數名」)=數值
如:Session["testTransmitVaraint"] = "testSession";
session對象所定義的變數只是瀏覽器端的專用變數,所以適用於局部會話間的網頁數據傳遞。
(2)使用Cookie
cookie是在瀏覽頁面時Web伺服器在瀏覽器端所寫入的一些小文件,cookie是存放在瀏覽器端本機磁碟上,而不是存放在服務端的。可以在發送數據時寫入cookie,接收時讀取cookie完成數據在Web頁面間的傳送。
發送頁面
HttpCookie cookie = new HttpCookie("testCookie");
cookie.Value = TextBox1.Text;
Response.SetCookie(cookie);
取Cookie頁
HttpCookie cookie = Request.Cookies["testCookie"];
Response.Write("<br>HttpCookie = " + cookie.Value);
(3)使用Application
application對象是用來記錄整個網站信息的,是記錄不同瀏覽器端共享的變數,無論有幾個瀏覽者同時存取網頁,都只會產生一個application對象實例。用戶可以通過定義application整站共享變數來實現網頁間的數據傳遞。其定義方法是:application(「變數名」)=數值
如:Application["testApplication"] = "testApplication";
application對象所定義的變數對於所有瀏覽端都是可見的,所以其使用場合是所有瀏覽端共享的全局數據傳遞。
(4)使用URL地址中的參數
URL方式是實現Web間數據傳遞最基本的方法,操作簡單,可很方便地實現不同Web頁面間的數據傳遞,但其安全性比較差。將要傳遞的數據附加在網頁地址(URL)後面進行傳遞。如:http://192.168.0.1/testweb.aspx?username=liming,其中?後面所跟著的字元串便是傳遞的數據,=前的是變數名,=後面是數值,可以使用request對象來獲取傳遞的數據。如:request(「username」)。這種方法在傳遞數據過程中其數據內容在URL欄中是顯示的,用戶能看到提交的內容。
以上四種方法的適用范圍:簡單變數如基本的數據類型的數據
(5)使用隱藏欄位來傳遞數據
通過在網頁上製作表單交互區域,用戶在瀏覽器端輸入數據,然後通過form提交到伺服器,在提交後的接受form數據的頁面里就可以接收到相應數據,即form的action頁面中可以使用request對象來接收所傳遞的數據。
如:
發送頁面:
}
接收頁面:request(「UserID」)
利用form頁面的文本框來接收用戶數據的輸入,通過submit按鈕提交後在targetweb頁面中使用request來接收數據。
適用范圍:基本的數據類型的數據,不宜傳遞對象變數等復雜的數據
(6)使用Server.Transfer
這個方法稍微復雜一點,但在頁面間值傳遞中卻是特別有用的,使用該方法你可以在另一個頁面以對象屬性的方式來存取顯露的值,當然了,使用這種方法,你需要額外寫一些代碼以創建一些屬性以便可以在另一個頁面訪問它,但是,這個方式帶來的好處也是顯而易見的。總體來說,使用這種方法是簡潔的同時又是面向對象的。
使用這種方法的整個過程如下:
1,在頁面里添加必要的控制項
2,創建返回值的Get屬性過程
3,創建可以返回表單的按鈕和鏈接按鈕
4,在按鈕單擊事件處理程序中調用Server.Transfer方法轉移到指定的頁面
5,在第二個頁面中,我們就可以使用Context.Handler屬性來獲得前一個頁面實例對象的引用,通過它,就可以使用存取前一個頁面的控制項的值了
此方法的適用范圍:簡單變數如基本的數據類型的數據,復雜變數如結構、類變數、DataSet、DataTable等
具體的事例,請見原代碼。
此方法的適用范圍:簡單變數如基本的數據類型的數據,復雜變數如結構、類變數、DataSet、DataTable等
(7)通過序列化對象
序列化是指將對象實例的狀態存儲到存儲媒體的過程。在此過程中,先將對象的公共欄位和私有欄位以及類的名稱(包括類所在的程序集)轉換為位元組流,然後再把位元組流寫入數據流。在隨後對對象進行反序列化時,將創建出與原對象完全相同的副本。
在面向對象的環境中實現序列化機制時,必須在易用性和靈活性之間進行一些權衡。只要您對此過程有足夠的控制能力,就可以使該過程在很大程度上自動進行。例如,簡單的二進制序列化不能滿足需要,或者,由於特定原因需要確定類中那些欄位需要序列化。
為什麼要使用序列化?最重要的兩個原因是:將對象的狀態保存在存儲媒體中以便可以在以後重新創建出完全相同的副本;按值將對象從一個應用程序域發送至另一個應用程序域。例如,序列化可用於在ASP.NET 中保存會話狀態,以及將對象復制到 Windows 窗體的剪貼板中。它還可用於按值將對象從一個應用程序域遠程傳遞至另一個應用程序域。
關於序列化對象更詳細的介紹,請參見微軟的「.NET 中的對象序列化」
(8)結束語
上述介紹的是網頁間數據傳遞的常用方法,各有千秋。其中URL方式和form方式實現方法簡單,可實現網頁間的簡單數據傳遞,一般為字元串類型,其特點是安全性差,而且必須是連續訪問兩頁面間數據傳遞。Cookie只能存放string類型的數據,如果想要存放更為復雜的數據類型,那麼必須先將其轉換為string類型。Application對象和Session對象操作相對復雜些,瀏覽量非常大的網頁使用時應適量,而且使用結束後盡量清除,否則大量使用有可能會導致伺服器的癱瘓。Session變數的安全性較高,可傳遞專用瀏覽端數據。具體應用決定了數據傳遞方式的選擇,合理數據傳遞方式選擇是Web頁面的設計中的關鍵考慮因素。