Web程序中頁面間數(shù)據(jù)傳遞方法小結(jié)
發(fā)表時間:2023-08-11 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]介紹 我們總是會遇到這樣的情況,需要將數(shù)值從一個網(wǎng)頁傳遞到另一個網(wǎng)頁。在這篇文章中,向你展示了幾種從一個網(wǎng)頁向另一個網(wǎng)頁傳遞數(shù)值的幾種方法。在此例子中,創(chuàng)建的網(wǎng)頁由一個文本控件和幾個按鈕控件組成。在...
介紹
我們總是會遇到這樣的情況,需要將數(shù)值從一個網(wǎng)頁傳遞到另一個網(wǎng)頁。在這篇文章中,向你展示了幾種從一個網(wǎng)頁向另一個網(wǎng)頁傳遞數(shù)值的幾種方法。在此例子中,創(chuàng)建的網(wǎng)頁由一個文本控件和幾個按鈕控件組成。在文本框中輸入的數(shù)據(jù)通過被標(biāo)識在按鈕控件中的不同方法從一個網(wǎng)頁傳遞到另一個網(wǎng)頁。
Response.Redirect
讓我們首先看一看如何使用Response.Redirect方法傳遞數(shù)據(jù)。這是它們之中最簡單的方法。在文本框中輸入一些數(shù)據(jù),并且當(dāng)你輸入完成數(shù)據(jù)后,按下“Respose.Redirect”按鈕。我們會得到一個提示,有時我們想在catch程序中傳遞另一個網(wǎng)頁,意味著捕捉到例外程序并且向另一個網(wǎng)頁傳遞。如果你試圖這樣做,它會給你一個System.Threading例外程序。因為你想遺留下一個線程向另一個網(wǎng)頁傳遞數(shù)據(jù),所以這個例外程序就會被拋出。
Response.Redirect("WebForm5.aspx",false);
這個語句告訴編譯器定位到“WebForm5.aspx”,這里的“false”意味著在當(dāng)前網(wǎng)頁不能結(jié)束你正在做的事情。應(yīng)該看一看線程發(fā)布命令的System.Threading類。在下面,看一看按鈕事件的C#代碼!皌xtName”文本控件的名字,文本框的內(nèi)的值傳遞到一個叫做“WebForm5.aspx”的網(wǎng)頁。在“?”之后的“Name”符號只是一個臨時的響應(yīng)變量,這個變量保持著文本的數(shù)值。
private void Button1_Click(object sender, System.EventArgs e)
{
// Value sent using HttpResponse
Response.Redirect("WebForm5.aspx?Name="+txtName.Text);
}
好的,到這種觀點(diǎn)為止,你使用Response發(fā)送了數(shù)值。剛剛,在此我收集到了這些數(shù)值,所以在“WebForm5.aspx”page_Load事件中,寫入這些代碼。首先,我們檢查到輸入的值不為null。如果不是這樣,我們只是簡單地在網(wǎng)頁上使用Label控件顯示數(shù)值。注意:如果你使用Response.Redirect方法來傳遞這些數(shù)值,所有這些數(shù)值在瀏覽器的URL中都是不可見的。你絕不能使用Response.Redirect來傳遞信用證號碼和機(jī)密信息。
if (Request.QueryString["Name"]!= null)
Label3.Text = Request.QueryString["Name"];
Cookies
接下來使用Cookies。Cookies在服務(wù)器端創(chuàng)建,但是客戶端省略。在此 “Cookies” 按鈕的click事件中,寫入以下代碼:
HttpCookie cName = new HttpCookie("Name");
cName.Value = txtName.Text;
Response.Cookies.Add(cName);
Response.Redirect("WebForm5.aspx");
首先,創(chuàng)建一個cookie命名為“cName”。既然一個cookie實(shí)例可以擁有許多數(shù)值,告訴編譯器這個cookie持有“Name”數(shù)值。我們將它賦值給TextBox并且最結(jié)后將它加入Response流,再使用Response.Redirect方法傳遞給其它網(wǎng)頁。
讓我們看一看如何得到被另一個網(wǎng)頁傳遞的cookie數(shù)值。
if (Request.Cookies["Name"] != null )
Label3.Text = Request.Cookies["Name"].Value;
如你所看到的,象我們以前做一的一樣正是使用同一種方法,剛剛我們在Request.QueryString之內(nèi),使用了Request.Cookies。記注一些瀏覽器不接收cookies。
[page_break]
Session Variables 接下來我們看一看session變量,這些變量由服務(wù)器來處理。第一個響影一從客戶端傳遞到服務(wù)器,Sessions就創(chuàng)建了,并且當(dāng)用戶關(guān)閉瀏覽器窗口或者一些異常操作發(fā)生,session就會結(jié)束。給你一些可以使用session變量來傳遞數(shù)值的方法。在下面你看到為用戶創(chuàng)建的Session和 “Name”是關(guān)鍵字,也如知名的Session關(guān)鍵字一樣,關(guān)鍵字被賦給TextBox數(shù)值。
// Session Created
Session["Name"] = txtName.Text;
Response.Redirect("WebForm5.aspx");
// The code below shows how to get the session value.
// This code must be placed in other page.
if(Session["Name"] != null)
Label3.Text = Session["Name"].ToString();
Application Variables
有時,我們需要存取來自網(wǎng)頁任何地方的數(shù)值。因為那樣,可以使用Application變量。這里有一小段代碼,這段代碼顯示如何做到那些事情。一旦創(chuàng)建Application變量并且為其賦值,在應(yīng)用程序的任何地方都可以重新得到它的值。
// This sets the value of the Application Variable
Application["Name"] = txtName.Text;
Response.Redirect("WebForm5.aspx");
// This is how we retrieve the value of the Application Variable
if( Application["Name"] != null )
Label3.Text = Application["Name"].ToString();
HttpContext
可以使用HttpContext從網(wǎng)頁中重新得到數(shù)值。通過使用方法的屬性獲得那些數(shù)值。既然它們易于編寫代碼和修改,使用屬性是一種好方法。在你的第一個網(wǎng)頁中,制造一個屬性,這個屬性可以返回TextBox的值。
public string GetName
{
get { return txtName.Text; }
}
我們使用Server.Transfer來將此控件發(fā)送到一個新網(wǎng)頁。注意:Server.Transfer僅僅將此控件傳遞到新的網(wǎng)頁并且不重新定位該網(wǎng)頁,這意味著你會看到在URL中舊網(wǎng)頁的地址。簡單地在“Server.Transfer”按鈕單擊事件,并且增加下列代碼。
Server.Transfer("WebForm5.aspx");
現(xiàn)在,讓我們定位網(wǎng)頁,數(shù)值就傳遞到該網(wǎng)頁上,在這種情況下使用的該網(wǎng)頁是“webForm5.aspx”。
// You can declare this Globally or in any event you like
WebForm4 w;
// Gets the Page.Context which is Associated with this page
w = (WebForm4)Context.Handler;
// Assign the Label control with the property "GetName" which returns string
Label3.Text = w.GetName;
Special Note
特別注意 與你看到的一樣,從一個網(wǎng)頁向別一網(wǎng)頁傳遞數(shù)值時有不同的方法。每一個方法有它自己的優(yōu)點(diǎn)也有其缺點(diǎn)。所以,當(dāng)你傳遞數(shù)值時,選擇好你所需要的所以你就會有一種好方法,這種方法對你是最為可行的。