asp.net|資料|頁面
ASP.NET較ASP最大的優點,也是其受到越來越多程式員的歡迎的主要原因就是,ASP.NET為開發人員提供了事件驅動的開發模式,從此程式員可以像利用可視化編程工具開發Windows應用程式一樣來開發ASP.NET的基於Web頁面的應用程式了。
一般稍微龐大的ASP.NET程式至少擁有二個或以上的Web頁面,程式員在開發類似ASP.NET應用程式時一般都需要處理在多個Web頁面傳遞資料的問題。我們知道ASP.NET程式中的各個Web頁面類似於Windows應用程式中的Form表單,但ASP.NET程式中的各Web的組織圖比起Windows應用程式中各Form表單要顯得鬆散許多。Windows應用程式中的各Form表單間資料傳遞可以通過定義全域變數(Public static 變數)等方法來實現。而這些方法卻無法用以ASP.NET中各Web頁面資料傳遞,所以就必須尋找另外的方法。本文就來介紹二種可以實現ASP.NET中各Web頁面資料傳遞的方法:第一種方法是使用QueryString,第二種方法是使用Session。
一.本文程式設計和啟動並執行軟體環境:
(1).微軟公司視窗2000伺服器版。
(2).Visual Studio .Net正式版,.Net FrameWork SDK版本號碼3705。
二.使用QueryString實現Web頁面間資料傳遞:
QueryString實現Web頁面間傳遞資料是一種比較老的方法,在ASP時就是使用這種方法實現不同Web頁面間資料傳遞的。這種方法的最大的優點就是簡單,但其缺點也是非常明顯的,就是其安全性比較差,具體表現在從源頁面向目標頁面傳遞資料時,頁面間傳遞的資料將會顯現在目標頁面的地址欄中,具體可見圖05中的地址欄。還有使用QueryString只能在頁面間傳遞數量有限的資料,並且不可以傳遞Object類型的資料。以下就是ASP.NET頁面間資料傳遞的具體實現步驟,所使用的開發工具是Visual Studio .Net,開發語言是C#。實現的功能是把源頁面(WebForm1.aspx)中的二個TextBox中的資料傳遞到目標頁面中,並通過目標頁面(WebForm2.aspx)中的二個Label顯示從源頁面中傳遞來的資料:
1. 啟動Visual Studio .Net。
2. 選擇菜單【檔案】|【建立】|【項目】後,彈出【建立項目】對話方塊。
3. 將【項目類型】設定為【Visual C#項目】。
4. 將【模板】設定為【ASP.NET Web 應用程式】。
5. 在【位置】的文字框中輸入"http://localhost/WebApplication4"。然後單擊【確定】按鈕,這樣在Visual Studio .Net就會在當前專案檔所在目錄中建立一個名稱為"WebApplication4"檔案夾,裡面存放是此項目的專案檔,項目中的其他檔案存放的位置是電腦Internet資訊服務的預設的Web網站所在的目錄中建立的一個名稱為"WebApplication4"的檔案夾中。具體如圖01所示:
圖01:建立一個ASP.NET項目對話方塊
6. 單擊菜單【項目】|【添加Web表單】,則彈出的【添加新項】對話方塊,將對話方塊【模板】設定為【Web表單】,在【名稱】文字框中輸入"WebForm2.aspx"後單擊【開啟】按鈕,則在此項目中加入另外一個新的表單"WebForm2.aspx",具體如圖02所示:
圖02:【添加新項】對話方塊
7. 把Visual Studio .Net的當前版面設定為WebForm1.aspx頁面的設計介面,並從【工具箱】中的【Web表單】選項卡中往WebForm1.aspx頁面中拖入下列組件,並執行相應的操作:
二個TextBox組件,分別用來輸入向目標表單傳遞的資料。
一個Button組件,用以實現源頁面向目標頁面傳遞資料,並在這個Button組件拖入WebForm1.aspx設計頁面後,雙擊它,則系統會在WebForm1.aspx..cs檔案中自動產生這個組件的Click事件對應的處理代碼。WebForm1.aspx設計後的頁面如圖03所示:
圖03:WebForm1.aspx設計後的頁面
8. 把Visual Studio .Net的當前版面設定為WebForm2.aspx頁面的設計介面,並從【工具箱】中的【Web表單】選項卡中往WebForm2.aspx頁面中拖入下列組件,並執行相應的操作:
二個Label組件,用以顯示源頁面向目標頁面傳遞的資料。
雙擊WebForm2.aspx設計頁面,則系統會在WebForm2.aspx..cs檔案中自動Page頁面的Load事件對應的處理代碼。程式將在此事件中接收源頁面向目標頁面傳遞來的資料,並通過Lable組件顯示出來。WebForm2.aspx設計後的頁面如圖04所示:
圖04:WebForm2.aspx設計後的頁面
9. 把Visual Studio .Net的當前視窗切換到WebForm1頁面的代碼編輯視窗,即:WebForm1.aspx.cs檔案的編輯視窗。用下列代碼替換WebForm1.aspx.cs中的Button1組件的Click事件對應的處理代碼,下列代碼的功能是實現源頁面向目標頁面傳遞資料:
private void Button1_Click ( object sender , System . EventArgs e ) { string sUrl; //定義一個字串,此字串中包含源頁面向目標傳遞的資料 sUrl = "WebForm2.aspx?name=" + TextBox1 . Text + "&email=" + TextBox2 . Text ; //從源頁面中獲得傳遞的資料 Response . Redirect ( sUrl ) ; //向目標頁面傳遞資料 } |
10. 把Visual Studio .Net的當前視窗切換到WebForm2頁面的代碼編輯視窗,即:WebForm2.aspx.cs檔案的編輯視窗。用下列代碼替換WebForm2.aspx.cs中Page的Load事件對應的處理代碼,下列代碼的功能是從源頁面中接收資料,並通過相應組件顯示接收到的資料:
private void Page_Load ( object sender , System . EventArgs e ) { Label1 . Text = Request . QueryString [ "name" ] ; //使用QueryString從源頁面中接收name變數資料,並通過Label1顯示 Label2 . Text = Request . QueryString [ "email" ] ; //使用QueryString從源頁面中接收email變數資料,並通過Label2顯示 // 在此處放置使用者代碼以初始化頁面 } |
11. 至此第一種實現ASP.NET頁面間資料傳遞的方法就介紹完了,此時單擊快速鍵【F5】運行程式,並在第一個頁面中二個TextBox組件分別輸入"阿虎"、"ahah@etang.com "後,具體如圖05所示,再單擊頁面中的Button1按鈕,則會得到圖06所示的頁面,可見的確把源頁面中的資料傳遞到了目標頁面中:
圖05:運行頁面01
圖06:運行頁面02
三.使用Session實現Web頁面間資料傳遞:
Session會話是編寫網頁時經常遇到的概念,使用Session傳遞資料雖然可以克服在使用QueryString時的缺點,但大量的使用則有可能導致伺服器的癱瘓,尤其是瀏覽量非常大的頁面,使用Session就尤其要注意。解決的辦法就是Session使用結束後,必須清除。以下就是在ASP.NET中使用Session傳遞資料的一般步驟,使用的開發工具是Visual Studio .Net,語言是C#:
1. 啟動Visual Studio .Net。
2. 選擇菜單【檔案】|【建立】|【項目】後,彈出【建立項目】對話方塊。
3. 將【項目類型】設定為【Visual C#項目】。
4. 將【模板】設定為【ASP.NET Web 應用程式】。
5. 在【位置】的文字框中輸入"http://localhost/session"。然後單擊【確定】按鈕,這樣在Visual Studio .Net就會在當前專案檔所在目錄中建立一個名稱為"session"檔案夾,裡面存放是此項目的專案檔,項目中的其他檔案存放的位置是電腦Internet資訊服務的預設的Web網站所在的目錄中建立的一個名稱為"session"的檔案夾中。具體如圖07所示:
圖07:建立一個ASP.NET項目對話方塊
6. 按照QueryString實現步驟中的第六步來操作,在session項目中建立一個Web頁面,名稱為"WebForm2.aspx"。
7. 按照QueryString實現步驟中的第七步來操作,在WebForm1.aspx頁面中建立二個TextBox組件、一個Button組件,並在WebForm1.aspx.cs中建立此Button組件的Click事件對應的處理代碼。
8. 按照QueryString實現步驟中的第八步來操作,在WebForm2.aspx頁面中建立二個Label組件,並在WebForm2.aspx.cs中建立此Page頁面的Load事件對應的處理代碼。
9. 把Visual Studio .Net的當前視窗切換到WebForm1頁面的代碼編輯視窗,即:WebForm1.aspx.cs檔案的編輯視窗。用下列代碼替換WebForm1.aspx.cs中的Button1組件的Click事件對應的處理代碼,下列代碼的功能是使用Session實現源頁面向目標頁面傳遞資料:
private void Button1_Click ( object sender , System . EventArgs e ) { Session [ "name" ] = TextBox1 . Text ; //建立Session變數,用以存放TextBox1組件中的資料 Session [ "email" ] = TextBox2 . Text ; //建立Session變數,用以存放TextBox2組件中的資料 Server . Transfer ( "WebForm2.aspx" ) ; //向目標頁面傳遞資料,如果你是其他頁面則替換上面的WebForm2.aspx } |
10. 把Visual Studio .Net的當前視窗切換到WebForm2頁面的代碼編輯視窗,即:WebForm2.aspx.cs檔案的編輯視窗。用下列代碼替換WebForm2.aspx.cs中Page的Load事件對應的處理代碼,下列代碼的功能是從源頁面中接收資料,並通過相應組件顯示接收到的資料,並清除建立的Session變數:
private void Page_Load ( object sender , System . EventArgs e ) { Label1 . Text = Session [ "name" ] . ToString ( ) ; Label2 . Text = Session [ "email" ] . ToString ( ) ; //從源頁面中接收資料,顯示出來 Session . Remove ( "name" ) ; Session . Remove ( "email" ) ; //清除建立的Session的變數 // 在此處放置使用者代碼以初始化頁面 } |
11. 至此在ASP.NET使用Session實現Web頁面間資料傳遞的方法就介紹完了,此時單擊快速鍵【F5】運行程式就可以得到如圖05和圖06所示的運行介面。
四.總結:
本文介紹了二種在ASP.NET這實現Web頁面間資料傳遞的方法,即:QueryString和Session。這二種方法可由千秋又各自擁有無法克服的缺點。總結起來就是QueryString相當簡單,Session相對複雜;QueryString安全性差,Session安全性高;QueryString可實現各Web頁面簡單資料傳遞,一般就是字串類型,Session可實現各Web頁面間複雜類型資料的傳遞等等。當然在ASP.NET中實現Web頁面資料傳遞的方法除了上述方法,肯定還可能存在其他更好、更簡單的,如有機會,希望能夠共同探討。