asp.net 頁面?zhèn)髦档膸讉€(gè)方法
更新時(shí)間:2009年11月12日 18:29:44 作者:
在網(wǎng)頁應(yīng)用程序的開發(fā)中,頁面之間的傳值應(yīng)該是最常見的問題了。
在這篇文章里,azamsharp 將為我們介紹一些ASP.NET頁面?zhèn)髦档姆绞?。本文所舉的例子非常簡單,僅僅包含了一個(gè)文本框和幾個(gè)按鈕,當(dāng)按鈕點(diǎn)擊時(shí)文本框中的字符串將會以不同的方式傳遞到另外的頁面去。
1. Response.Redirect (或稱 Query String 方式、URL方式)
Response.Redirect("WebForm5.aspx");
首先讓我們看看 Response.Redirect 方法,這應(yīng)該是最簡單的了,當(dāng)我們點(diǎn)擊Response.Redirect按鈕后觸發(fā)上面的那行代碼即可。在這里跟大家分享一個(gè)小技巧:有些時(shí)候我們會把上面的代碼放在try{ ... }catch() 中去,也就是說當(dāng)我們捕獲異常,并把異常傳遞給另一個(gè)網(wǎng)頁。如果我們嘗試這樣做,也許會得到一個(gè)“System.Threading” 異常,這是因?yàn)槲覀兲D(zhuǎn)到了另外一個(gè)頁面,而原來的頁面線程仍然在運(yùn)行中??梢赃@樣來解決此問題:
Response.Redirect("WebForm5.aspx",false);
這意味著告訴編譯器去“WebForm5.aspx”, 同時(shí)“false”參數(shù)告訴編譯器不要停止在原來頁面上的活動, 這方面我們可以參見System.Threading類。
在下面的代碼中,“txtName”是待傳值的文本框的名字,那個(gè)跟在“?”后面的“Name” 是一個(gè)臨時(shí)response變量的標(biāo)志,它承載了txtName的值。
private void Button1_Click(object sender, System.EventArgs e)
{
// Value sent using HttpResponse
Response.Redirect("WebForm5.aspx?Name="+txtName.Text);
}
OK,到此位置,我們已經(jīng)完成了Response的傳值。但是,我們在"WebForm5.aspx"中怎樣接收傳來的值呢?不要急,我們將在"WebForm5.aspx"的page_Load事件中寫下面的代碼。首先,我們要確認(rèn)傳來的值不是“null”,如果不是“null”,我們就可以用Label將這個(gè)值顯示出來。
注:當(dāng)我們使用Response.Redirect傳遞變量時(shí),所有的變量都能在瀏覽器的URL中看到,我們不能用這種方法來傳遞重要的機(jī)密數(shù)據(jù),如信用卡號等。
if (Request.QueryString["Name"]!= null)
Label3.Text = Request.QueryString["Name"];
2. Cookies 方式
接下來是用cookies, Cookies由服務(wù)端創(chuàng)建,但保存在客戶端,當(dāng)我們點(diǎn)擊“Cookies”按鈕時(shí),運(yùn)行如下代碼:
HttpCookie cName = new HttpCookie("Name");
cName.Value = txtName.Text;
Response.Cookies.Add(cName);
Response.Redirect("WebForm5.aspx");
首先,我們創(chuàng)建了一個(gè)名叫“cName”的cookie實(shí)例,由于一個(gè)cookie實(shí)例可以保存多個(gè)值,我們需要告訴編譯器這個(gè)cookie將保存“Name”值,并把txtName.Text的值賦給它,并把它加到"輸出流” 中,并使用Response.Redirect輸出到另外一個(gè)網(wǎng)頁。
然后讓我們看看怎樣在目標(biāo)頁面中取出這個(gè)cookie中的值:
if (Request.Cookies["Name"] != null )
Label3.Text = Request.Cookies["Name"].Value;
顯然,步驟跟上一種方法非常相似,只是使用Request.Cookies代替了Request.QueryString。
注:一些瀏覽器是不支持Cookies的。
3. Session 變量
接下來我們看看在服務(wù)端維持的Session變量。 Session在用戶向服務(wù)端發(fā)出首次請求時(shí)被創(chuàng)建,而在用戶關(guān)閉瀏覽器或異常發(fā)生時(shí)終止(其實(shí)還有過期的情況)。下面的代碼是用Session來傳值的例子。 我們可以看到 Session 為用戶創(chuàng)建了“Name” 鍵,并把TextBox的值賦給它。
// Session 創(chuàng)建
Session["Name"] = txtName.Text;
Response.Redirect("WebForm5.aspx");
// 下面的代碼顯示如何從Session中取值
// 代碼放在其它頁面中
if(Session["Name"] != null)
Label3.Text = Session["Name"].ToString();
4. Application 變量
有些時(shí)候,我們需要一個(gè)值能夠在所有的頁面中訪問,這時(shí)候我們可以使用Application變量。 如下列代碼所示,一旦我們創(chuàng)建了Application變量并賦值,就可以在網(wǎng)站(項(xiàng)目)的所有頁面中獲得它。
// 為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方式)在頁面之間傳遞變量,此時(shí),要傳遞的變量可以通過屬性或方法來獲得,使用屬性將會比較容易一些。好,讓我們在第一個(gè)頁面中來寫一個(gè)用來獲得TextBox值的屬性:
public string GetName
{
get { return txtName.Text; }
}
我們需要使用Server.Transfer把這個(gè)值發(fā)送到另外一個(gè)頁面中去,請注意Server.Transfer只是發(fā)送控件到一個(gè)新的頁面去,而并不會使瀏覽器重定向到另一個(gè)頁面。所以,我們我們在地址欄中仍然看到的是原來頁面的URL。如下代碼所示:
Server.Transfer("WebForm5.aspx");
接下來,我們到"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;
結(jié)束語:
如我們看到的那樣,各種傳值方式都各有優(yōu)劣,在不同的情況下選擇適當(dāng)?shù)姆绞绞呛苤匾摹?
1. Response.Redirect (或稱 Query String 方式、URL方式)
復(fù)制代碼 代碼如下:
Response.Redirect("WebForm5.aspx");
首先讓我們看看 Response.Redirect 方法,這應(yīng)該是最簡單的了,當(dāng)我們點(diǎn)擊Response.Redirect按鈕后觸發(fā)上面的那行代碼即可。在這里跟大家分享一個(gè)小技巧:有些時(shí)候我們會把上面的代碼放在try{ ... }catch() 中去,也就是說當(dāng)我們捕獲異常,并把異常傳遞給另一個(gè)網(wǎng)頁。如果我們嘗試這樣做,也許會得到一個(gè)“System.Threading” 異常,這是因?yàn)槲覀兲D(zhuǎn)到了另外一個(gè)頁面,而原來的頁面線程仍然在運(yùn)行中??梢赃@樣來解決此問題:
復(fù)制代碼 代碼如下:
Response.Redirect("WebForm5.aspx",false);
這意味著告訴編譯器去“WebForm5.aspx”, 同時(shí)“false”參數(shù)告訴編譯器不要停止在原來頁面上的活動, 這方面我們可以參見System.Threading類。
在下面的代碼中,“txtName”是待傳值的文本框的名字,那個(gè)跟在“?”后面的“Name” 是一個(gè)臨時(shí)response變量的標(biāo)志,它承載了txtName的值。
復(fù)制代碼 代碼如下:
private void Button1_Click(object sender, System.EventArgs e)
{
// Value sent using HttpResponse
Response.Redirect("WebForm5.aspx?Name="+txtName.Text);
}
OK,到此位置,我們已經(jīng)完成了Response的傳值。但是,我們在"WebForm5.aspx"中怎樣接收傳來的值呢?不要急,我們將在"WebForm5.aspx"的page_Load事件中寫下面的代碼。首先,我們要確認(rèn)傳來的值不是“null”,如果不是“null”,我們就可以用Label將這個(gè)值顯示出來。
注:當(dāng)我們使用Response.Redirect傳遞變量時(shí),所有的變量都能在瀏覽器的URL中看到,我們不能用這種方法來傳遞重要的機(jī)密數(shù)據(jù),如信用卡號等。
復(fù)制代碼 代碼如下:
if (Request.QueryString["Name"]!= null)
Label3.Text = Request.QueryString["Name"];
2. Cookies 方式
接下來是用cookies, Cookies由服務(wù)端創(chuàng)建,但保存在客戶端,當(dāng)我們點(diǎn)擊“Cookies”按鈕時(shí),運(yùn)行如下代碼:
復(fù)制代碼 代碼如下:
HttpCookie cName = new HttpCookie("Name");
cName.Value = txtName.Text;
Response.Cookies.Add(cName);
Response.Redirect("WebForm5.aspx");
首先,我們創(chuàng)建了一個(gè)名叫“cName”的cookie實(shí)例,由于一個(gè)cookie實(shí)例可以保存多個(gè)值,我們需要告訴編譯器這個(gè)cookie將保存“Name”值,并把txtName.Text的值賦給它,并把它加到"輸出流” 中,并使用Response.Redirect輸出到另外一個(gè)網(wǎng)頁。
然后讓我們看看怎樣在目標(biāo)頁面中取出這個(gè)cookie中的值:
復(fù)制代碼 代碼如下:
if (Request.Cookies["Name"] != null )
Label3.Text = Request.Cookies["Name"].Value;
顯然,步驟跟上一種方法非常相似,只是使用Request.Cookies代替了Request.QueryString。
注:一些瀏覽器是不支持Cookies的。
3. Session 變量
接下來我們看看在服務(wù)端維持的Session變量。 Session在用戶向服務(wù)端發(fā)出首次請求時(shí)被創(chuàng)建,而在用戶關(guān)閉瀏覽器或異常發(fā)生時(shí)終止(其實(shí)還有過期的情況)。下面的代碼是用Session來傳值的例子。 我們可以看到 Session 為用戶創(chuàng)建了“Name” 鍵,并把TextBox的值賦給它。
復(fù)制代碼 代碼如下:
// Session 創(chuàng)建
Session["Name"] = txtName.Text;
Response.Redirect("WebForm5.aspx");
// 下面的代碼顯示如何從Session中取值
// 代碼放在其它頁面中
if(Session["Name"] != null)
Label3.Text = Session["Name"].ToString();
4. Application 變量
有些時(shí)候,我們需要一個(gè)值能夠在所有的頁面中訪問,這時(shí)候我們可以使用Application變量。 如下列代碼所示,一旦我們創(chuàng)建了Application變量并賦值,就可以在網(wǎng)站(項(xiàng)目)的所有頁面中獲得它。
復(fù)制代碼 代碼如下:
// 為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方式)在頁面之間傳遞變量,此時(shí),要傳遞的變量可以通過屬性或方法來獲得,使用屬性將會比較容易一些。好,讓我們在第一個(gè)頁面中來寫一個(gè)用來獲得TextBox值的屬性:
復(fù)制代碼 代碼如下:
public string GetName
{
get { return txtName.Text; }
}
我們需要使用Server.Transfer把這個(gè)值發(fā)送到另外一個(gè)頁面中去,請注意Server.Transfer只是發(fā)送控件到一個(gè)新的頁面去,而并不會使瀏覽器重定向到另一個(gè)頁面。所以,我們我們在地址欄中仍然看到的是原來頁面的URL。如下代碼所示:
Server.Transfer("WebForm5.aspx");
接下來,我們到"WebForm5.aspx"看看:
復(fù)制代碼 代碼如下:
// 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;
結(jié)束語:
如我們看到的那樣,各種傳值方式都各有優(yōu)劣,在不同的情況下選擇適當(dāng)?shù)姆绞绞呛苤匾摹?
您可能感興趣的文章:
- asp.net傳多個(gè)值到其它頁面的具體實(shí)現(xiàn)
- ASP.NET實(shí)現(xiàn)頁面?zhèn)髦档膸追N方法小結(jié)
- asp.net后臺關(guān)閉當(dāng)前頁面并傳值的兩種方法
- ASP.NET 頁面?zhèn)髦党S梅椒偨Y(jié)
- asp.net頁面?zhèn)髦禍y試實(shí)例代碼(前后臺)
- ASP.NET頁面?zhèn)鬟f值的方式介紹
- asp.net 頁面間傳值與跳轉(zhuǎn)的區(qū)別
- ASP.NET 頁面之間傳遞值方式優(yōu)缺點(diǎn)比較
- ASP.NET 跨頁面?zhèn)髦捣椒?/a>
- ASP.Net頁面間變量值傳遞的方法
相關(guān)文章
ASP.NET MVC5+EF6+EasyUI后臺管理系統(tǒng) 微信公眾平臺開發(fā)之消息管理
這篇文章主要介紹了ASP.NET MVC5+EF6+EasyUI后臺管理系統(tǒng),微信公眾平臺開發(fā)之消息管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09asp.net類庫中添加WebService引用出現(xiàn)問題解決方法
在Web項(xiàng)目內(nèi)添加WebService的引用是件很簡單的事情,不過對于一些新手朋友來說,就沒有那么簡單了,因?yàn)樵谔砑拥倪^程中總會遇到一些困難,接下來詳細(xì)介紹如何解決,感興趣的你可不要錯(cuò)過了啊2013-02-02asp.net中利用ajax獲取動態(tài)創(chuàng)建表中文本框的值
通常在做主從表的數(shù)據(jù)錄入中,會碰到在一個(gè)頁面上同時(shí)錄入主表數(shù)據(jù)和從表數(shù)據(jù),主表的數(shù)據(jù)只有一條,從表的數(shù)據(jù)有一條到多條,這樣就要動態(tài)創(chuàng)建從表數(shù)據(jù)錄入入口。2010-03-03WPF實(shí)現(xiàn)雷達(dá)掃描圖的繪制詳解
這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)雷達(dá)掃描圖的繪制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2022-05-05asp.net(c#)兩種隨機(jī)數(shù)的算法,可用抽考題
asp.net(c#)兩種隨機(jī)數(shù)的算法,可用抽考題...2007-04-04動態(tài)生成table并實(shí)現(xiàn)分頁效果心得分享
動態(tài)生成table并實(shí)現(xiàn)分頁在開發(fā)過程中時(shí)一個(gè)很好的應(yīng)用,接下來本文也要實(shí)現(xiàn)一個(gè)類似效果,感興趣的朋友可以參考下哈2013-04-04asp.net 臨時(shí)數(shù)據(jù)保存實(shí)現(xiàn)代碼
在一個(gè)程序運(yùn)行的時(shí)候往往我們會回到上一個(gè)頁面,或者我們會需要當(dāng)時(shí)留在這個(gè)頁面的臨時(shí)數(shù)據(jù),例如,我們用百度搜索“腳本”之后我們會看到很多那啥我就不再說了啊!然后我們返回本來頁面在文本框內(nèi)會有“腳本”的字樣,我們一下代碼段就是實(shí)現(xiàn)這個(gè)功能2012-04-04.NET?Core使用Worker?Service創(chuàng)建服務(wù)
這篇文章介紹了.NET?Core使用Worker?Service創(chuàng)建服務(wù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02