| 在WEB環境中頁面之間的資料傳遞可以通過傳統的URL參數傳遞和會話級傳遞以及通過ASP.NET伺服器控制項傳遞頁面值。
1使用Querystring
Querystring是一種非常簡單的傳遞參數的方式,其缺點就是會把要傳送的值顯示在瀏覽器的地址欄中(不安全),同時在使用querystring傳值得時候不能傳遞對象,參數的長度不能大於1024位元組,當參數中有中文得時候,通常需要使用HttpUlitity.UrlEncode方法來對參數進行編碼和解嗎。當然如果你想傳遞一個安全性不是那麼太重要或者是一個簡單的數值時,用此方法最好不過了。下面通過一個小例子來完成參數傳遞過程
a.aspx的C#代碼
private void Button1_Click(object sender System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}
b.aspx中C#代碼
private void Page_Load(object sender EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}
2.使用Application傳遞參數
使用Application變數傳遞參數是一種最常見的方法,Application對象的作用範圍是整個全域,也就是說對所有使用者都有效。其常用的方法用Lock和UnLock。但是缺點在於使用Application得使用一般是相對於整個項目來說相對靜止的變數,比如資料庫連接變數等。對於那些針對每一個使用者,每一個會話未必一樣得變數就不適用了。通常Application變數得值是在Config終指定。也可以在global.ascx中指定。例如:
a.aspx的C#代碼
private void Button1_Click(object sender System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}
b.aspx中C#代碼
private void Page_Load(object sender EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}
3使用Session變數
使用Session變數傳值是一種最常見的方式了,優點此種方式不僅可以把值傳遞到下一個頁面,還可以交叉傳遞到多個頁面,直至把Session變數的值removed後,變數才會消失。但是使用Session變數往往會佔用伺服器端的記憶體使用量,所以再網頁流量很大的時候,Session便不能很好的完成傳值得任務,由於session有一個timeout,所以在使用的時候對使用者得操作也有一定的影響。例如:
建立一個web form
在建立的web form中放置一個button1,在放置兩個TextBox1TextBox2 為button按鈕建立click事件代碼如下:
private void Button1_Click(object sender System.EventArgs e)
{
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Response.Redirect("webform2.aspx");
}
建立一個目標頁面命名為webform2在webform2中放置兩個Label1Label2在webform2的Page_Load中添加如下代碼:
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");
}
運行即可看到傳遞後的結果了。
4使用cookie方法傳遞參數
這個也是大家常使用的方法,cookie是瀏覽器端的文字檔,通過對它的讀、寫,可以很方便的實現頁面間的與Session一樣,其是針對每一個使用者而言的,但是有個本質的區別,即Cookie是存放在用戶端的,而session是存放在伺服器端的。而且Cookie的使用要配合ASP.NET內建對象Request來使用。cookie是瀏覽器端的文字檔,通過對它的讀、寫,可以很方便的實現頁面間的參數傳遞,而且作為儲存時間,也就是資料得有效期間來說,確是儲存得最好的。但是其缺點是安全性較差,大小受限,不能儲存對象。例如:
a.aspx的C#代碼
private void Button1_Click(object sender System.EventArgs e)
{
HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
Server.Transfer("b.aspx");
}
b.aspx中C#代碼
private void Page_Load(object sender EventArgs e)
{
string name;
name = Request.Cookie["name"].Value.ToString();
}
5 使用Server.Transfer方法
這個可以說是面象對象開發所使用的方法,其使用Server.Transfer方法把流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流,所以這個方法是完全面象對象的,簡潔有效。它在伺服器端直接重新導向效率高。而且它可以傳遞上一個頁面的提交值。比如:A頁面提交值到B頁面,B頁面Transfer到C頁面,C頁面同樣可以收到A頁面提交的值。但是它的缺點在於不能重新整理頁面,比如:A頁面提交登入資訊到B頁面,B頁面處理後Transfer再到A,A頁面得不到重新整理,指定了到期也不行。如果A、B頁面不在同一個目錄下,我們還會發現更多意想不到的結果,使用相對連結的圖片、超連結的指向都改變了,造成這種原因是B頁面讀取A頁面內容卻以B頁面的身份輸出,所以路徑改變了。例如:
a.aspx的C#代碼
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender System.EventArgs e)
{
Server.Transfer("b.aspx");
}
b.aspx中C#代碼
private void Page_Load(object sender EventArgs e)
{
a newWeb; //執行個體a表單
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}
以上五種在Web頁面之間傳遞值的方法它們各有其優缺點我們通過他們的優缺點比較發現它們各自的特點。因而使用它們時要根據具體的實際情況選擇使用那一種方法不可一概而論。
|