ASP.NET頁面傳值匯總(Session/Server.Transfer/Query String/Cookie/Application)

來源:互聯網
上載者:User
ASP.NET頁面傳值匯總(Session/Server.Transfer/Query String/Cookie/Application) 
原文地址:http://www.codeproject.com/KB/aspnet/TransferingValues.aspx

  介紹:

   在網頁應用程式的開發中,頁面之間的傳值應該是最常見的問題了。 在這篇文章裡,azamsharp 將為我們介紹一些ASP.NET頁面傳值的方式。本文所舉的例子非常簡單,僅僅包含了一個文字框和幾個按鈕,當按鈕點擊時文字框中的字串將會以不同的方 式傳遞到另外的頁面去。

  1. Response.Redirect (或稱 Query String 方式、URL方式)

  Response.Redirect("WebForm5.aspx");

   首先讓我們看看 Response.Redirect 方法,這應該是最簡單的了,當我們點擊Response.Redirect按鈕後觸發上面的那行代碼即可。在這裡跟大家分享一個小技巧:有些時候我們會把 上面的代碼放在try{ ... }catch() 中去,也就是說當我們捕獲異常,並把異常傳遞給另一個網頁。如果我們嘗試這樣做,也許會得到一個“System.Threading” 異常,這是因為我們跳轉到了另外一個頁面,而原來的頁麵線程仍然在運行中。可以這樣來解決此問題:

  Response.Redirect("WebForm5.aspx",false);

  這意味著告訴編譯器去“WebForm5.aspx”, 同時“false”參數告訴編譯器不要停止在原來頁面上的活動, 這方面我們可以參見System.Threading類。

在下面的代碼中,“txtName”是待傳值的文字框的名字,那個跟在“?”後面的“Name” 是一個臨時response變數的標誌,它承載了txtName的值。

privatevoidButton1_Click(objectsender,System.EventArgse)
{
//ValuesentusingHttpResponse
Response.Redirect("WebForm5.aspx?Name="+txtName.Text);
}

   OK,到此位置,我們已經完成了Response的傳值。但是,我們在"WebForm5.aspx"中怎樣接收傳來的值呢?不要急,我們將 在"WebForm5.aspx"的page_Load事件中寫下面的代碼。首先,我們要確認傳來的值不是“null”,如果不是“null”,我們就可 以用Label將這個值顯示出來。

  註:當我們使用Response.Redirect傳遞變數時,所有的變數都能在瀏覽器的URL中看到,我們不能用這種方法來傳遞重要的機密資料,如信用卡號等。

if(Request.QueryString["Name"]!=null)
Label3.Text=Request.QueryString["Name"];

  2. Cookies 方式

  接下來是用cookies, Cookies由服務端建立,但儲存在用戶端,當我們點擊“Cookies”按鈕時,運行如下代碼:

HttpCookiecName=newHttpCookie("Name");
cName.Value=txtName.Text;
Response.Cookies.Add(cName);
Response.Redirect("WebForm5.aspx");

   首先,我們建立了一個名叫“cName”的cookie執行個體,由於一個cookie執行個體可以儲存多個值,我們需要告訴編譯器這個cookie將儲存 “Name”值,並把txtName.Text的值賦給它,並把它加到"輸出資料流” 中,並使用Response.Redirect輸出到另外一個網頁。

  然後讓我們看看怎樣在目標頁面中取出這個cookie中的值:

if(Request.Cookies["Name"]!=null)
Label3.Text=Request.Cookies["Name"].Value;

  顯然,步驟跟上一種方法非常相似,只是使用Request.Cookies代替了Request.QueryString。

  註:一些瀏覽器是不支援Cookies的。

  3. Session 變數

   接下來我們看看在服務端維持的Session變數。 Session在使用者向服務端發出首次請求時被建立,而在使用者關閉瀏覽器或異常發生時終止(其實還有到期的情況)。下面的代碼是用Session來傳值的 例子。 我們可以看到 Session 為使用者建立了“Name” 鍵,並把TextBox的值賦給它。

  Code

//Session建立
Session["Name"]=txtName.Text;
Response.Redirect("WebForm5.aspx");
//下面的代碼顯示如何從Session中取值
//代碼放在其它頁面中
if(Session["Name"]!=null)
Label3.Text=Session["Name"].ToString();

  4. Application 變數

  有些時候,我們需要一個值能夠在所有的頁面中訪問,這時候我們可以使用Application變數。 如下列代碼所示,一旦我們建立了Application變數並賦值,就可以在網站(項目)的所有頁面中獲得它。

  Code

//為Application變數賦值
Application["Name"]=txtName.Text;
Response.Redirect("WebForm5.aspx");
//從Application變數中取出值
if(Application["Name"]!=null)
Label3.Text=Application["Name"].ToString();

  5. Server.Transfer方式(或稱HttpContext方式)

  我們還可以使用 Server.Transfer方式(或稱HttpContext方式)在頁面之間傳遞變數,此時,要傳遞的變數可以通過屬性或方法來獲得,使用屬性將會比較容易一些。好,讓我們在第一個頁面中來寫一個用來獲得TextBox值的屬性:

  Code

publicstringGetName
{
get{returntxtName.Text;}
}

  我們需要使用Server.Transfer把這個值發送到另外一個頁面中去,請注意Server.Transfer只是發送控制項到一個新的頁面去,而並不會使瀏覽器重新導向到另一個頁面。所以,我們我們在地址欄中仍然看到的是原來頁面的URL。如下代碼所示:

Server.Transfer("WebForm5.aspx");

  接下來,我們到"WebForm5.aspx"看看:

  Code

//YoucandeclarethisGloballyorinanyeventyoulike
WebForm4w;
//GetsthePage.ContextwhichisAssociatedwiththispage
w=(WebForm4)Context.Handler;
//AssigntheLabelcontrolwiththeproperty"GetName"whichreturnsstring
Label3.Text=w.GetName;

  結束語:

  如我們看到的那樣,各種傳值方式都各有優劣,在不同的情況下選擇適當的方式是很重要的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.