頁面間傳遞數據的幾種方法
在頁面間傳遞數據時,我們有以下幾種選擇:
1、Query String
一個很常見的方法,Query String是URL中問號之後的那一部分。其優點在於它是輕量級的,不會給服務器帶來任何負擔。而它也有幾個缺點:傳遞的信息僅限於簡單的字符串,而且必須是合法的URL字符;信息是對用戶是可見的,因而存在安全性問題;用戶可能會嘗試手動修改查詢字符串,這可能是程序未預料到或不能防范的;很多浏覽器對URL的長度都有所限制(通常為1KB到2KB)。
2、CookIE
Cookie是創建在客戶端硬盤上(或者,如果它們是臨時的,則在內存中)的小文件。其優點在於使用時不易被用戶察覺,可被程序中每個頁面使用,並且可將數據長期保存。但它也有一些與Query String 相同的缺點:僅限於簡單的字符串信息;一旦用戶找到了相應的文件,它們也是易於訪問和閱讀的。所以CookIE最好不要用於保存復雜的或私密的信息。
3、Session
可以在源頁面中將數據保存在Session中,然後在目標頁面中讀取這些數據。注意:將大量的信息存儲在Session中會嚴重影響服務器的性能。
4、Server.Transfer
要進行服務器端的重定向,可以使用Server.Transfer。因為在服務器端執行,Server.Transfer方法不需要請求另一頁面。使用HttpContext,我們可以在目標頁面中訪問源頁面中的數據。其缺點是,浏覽器並不了解返回給它的是另外一個頁面,它在地址欄中會顯示第一個頁面的URL,這會讓用戶陷入混亂,在他們使用書簽的時候也會產生麻煩。所以不推薦該方法。
5、其它
還可以使用緩存(Cache)來存儲數據,可在程序的任意處訪問緩存。建議僅對那些修改不太頻繁但經常使用的數據使用緩存。 另外在某些特定情況下還可以使用Application變量,如統計頁面的點擊數等。
使用Cross-Page Postback
ASP.Net 2.0中引入了一個新的方法:跨頁面提交,即postback觸發在另一個頁面。這種技術聽起來很是簡單,但卻存在隱患。一不小心,就會導致你創建的頁面緊密耦合,難以維護和調試。
支持跨頁面提交的機制是一個名為PostBackUrl的屬性,該屬性由IButtonControl接口定義,實現這個接口的按鈕控件包括ImageButton,LinkButton,Button。將PostBackUrl屬性值設置為另一個web窗體的名稱(即URL),當用戶點擊按鈕時,頁面將被提交到新的URL。
看下面這個示例,該示例包括源頁面CrossPage1.aspx和目標頁面CrossPage2.ASPx:
CrossPage1.ASPx