ASP.NET頁(yè)面之間傳值的方法,我試過(guò)的有5種方法,現在總結如下:
注意:如果誰(shuí)還知道別的方法,不妨說(shuō)來(lái),共同交流一下。
1.使用session變量
使用這個(gè)方法是最常見(jiàn)的方法,在此中方式不僅可以把值傳遞到下一個(gè)頁(yè)面,還可以交叉傳遞到多個(gè)頁(yè)面,直至把Session變量的值removed后,變量才會(huì )消失。舉例如下:
(1)創(chuàng )建一個(gè)web form
(2)在新建的web form中放置一個(gè)button1,在放置兩個(gè)TextBox1,TextBox2
(3)為button按鈕創(chuàng )建click事件
代碼如下:
private void Button1_Click (object sender, System.EventArgs e)
{
Session["UserName"]=TextBox1.Text;
Session["Password"]=TextBox2.Text;
Response.Redirect("login.aspx");
}
(4)新建一個(gè)目標頁(yè)面命名為login
(5)在webform2中放置兩個(gè)Label1,Label2
在webform2的Page_Load中添加如下代碼:
private void Page_Load (object sender, System.EventArgs e)
{
Label1.Text=Session["UserName"].ToString();
Label2.Text=Session["Password"].ToString();
Session.Remove("UserName"); //清除COOKIE
Session.Remove("Password"); //清除COOKIE
}
運行,即可看到傳遞后的結果了。
2.使用QueryString
Querystring是一種非常簡(jiǎn)單的傳值方式,但是它的缺點(diǎn)就是會(huì )把要傳送的值顯示在瀏覽器的地址欄中,并且在此方法中不能夠傳遞對象。如果你想傳遞一個(gè)安全性不是那么太重要或者是一個(gè)簡(jiǎn)單的數值時(shí),這個(gè)方法是最合適的。舉例如下:
(1)創(chuàng )建一個(gè)web form
(2)在新建的web form中放置一個(gè)button1,在放置兩個(gè)TextBox1,TextBox2
(3)為button按鈕創(chuàng )建click事件
代碼如下:
private void Button1_Click (object sender, System.EventArgs e)
{
string url="webform2.aspx?UserName=" + TextBox1.Text + "&Password=" + TextBox2.Text;
Response.Redirect(url);
}
(4)新建一個(gè)目標頁(yè)面命名為webform2
(5)在webform2中放置兩個(gè)Label1,Label2
在webform2的Page_Load中添加如下代碼:
private void Page_Load (object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["UserName"];
Label2.Text=Request.QueryString["Password"];
}
運行,即可看到傳遞后的結果了。
3.使用Server.Transfer
這個(gè)方法雖然有點(diǎn)麻煩,但是也是其中的一種。舉例如下:
(1)創(chuàng )建一個(gè)web form
(2)在新建的web form中放置一個(gè)button1,在放置兩個(gè)TextBox1,TextBox2
(3)為button按鈕創(chuàng )建click事件
代碼如下:
private void Button1_Click (object sender, System.EventArgs e)
{
Server.Transfer("webform2.aspx");
}
4、創(chuàng )建過(guò)程來(lái)返回TextBox1,TextBox2控件的值代碼如下:
public string UserName
{
get
{
return TextBox1.Text;
}
}
public string Password
{
get
{
return TextBox2.Text;
}
}
(5)新建一個(gè)目標頁(yè)面命名為webform2
(6)在webform2中放置兩個(gè)Label1,Label2
在webform2的Page_Load中添加如下代碼:
private void Page_Load (object sender, System.EventArgs e)
{
//創(chuàng )建原始窗體的實(shí)例
WebForm1 wf1;
//獲得實(shí)例化的句柄
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.UserName;
Label2.Text=wf1.Password;
}
運行,即可看到傳遞后的結果了。
4.使用Cookie對象變量
與Session一樣,是針對每一個(gè)用戶(hù)而言的,但是有個(gè)本質(zhì)的區別,即Cookie是存放在客戶(hù)端的,而session是存放在服務(wù)器端的。而且Cookie的使用要配合ASP.NET內置對象Request來(lái)使用。
(1)創(chuàng )建一個(gè)web form
(2)在新建的web form中放置一個(gè)button1,在放置兩個(gè)TextBox1
(3)為button按鈕創(chuàng )建click事件
代碼如下:
private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie cookie_Name = new HttpCookie("UserName");
cookie_Name.Value = Label1.Text;
Response.AppendCookie(cookie_Name);
Server.Transfer("success.aspx");
}
success.aspx中代碼如下:
private void Page_Load(object sender, EventArgs e)
{
string name= Request.Cookies["UserName"].Value.ToString();
}
5.使用Application對象變量
Application對象的作用范圍是整個(gè)全局,也就是說(shuō)對所有用戶(hù)都有效。其常用的方法用Lock和UnLock。
(1)創(chuàng )建一個(gè)web form
(2)在新建的web form中放置一個(gè)button1,在放置兩個(gè)TextBox1
(3)為button按鈕創(chuàng )建click事件
代碼如下:
private void Button1_Click(object sender, System.EventArgs e)
{
Application["UserName"] = Label1.Text;
Server.Transfer("success.aspx");
}
success.aspx中的代碼
private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["UserName"].ToString();
Application.UnLock();
}
注意地方:
server.Transfer與response.Redirect的作用都是重定向,server.Transfer與response.Redirect相比有兩個(gè)優(yōu)點(diǎn)、一個(gè)缺點(diǎn):
優(yōu)點(diǎn):
一、它在服務(wù)器端直接重定向,不用像response.Redirect一樣先與瀏覽器通信再重定向,效率高。
二、它可以傳遞上一個(gè)頁(yè)面的提交值。比如:A頁(yè)面提交值到B頁(yè)面,B頁(yè)面Transfer到C頁(yè)面,C頁(yè)面同樣可以收到A頁(yè)面提交的值。
缺點(diǎn):
不能刷新頁(yè)面,比如:A頁(yè)面提交登錄信息到B頁(yè)面,B頁(yè)面處理后Transfer再到A,A頁(yè)面得不到刷新,指定了過(guò)期也不行。如果A、B頁(yè)面不在同一個(gè)目錄下,我們還會(huì )發(fā)現更多意想不到的結果,使用相對鏈接的圖片、超鏈接的指向都改變了,造成這種原因是B頁(yè)面讀取A頁(yè)面內容卻以B頁(yè)面的身份輸出,所以路徑改變了。
如果誰(shuí)有更好的方法,可以寫(xiě)出來(lái),大家分享一下。以上5種方法,我都試過(guò),都可以成功的。。。