ASP
NET提供了卓越的事件驅動編程模型
讓開發者簡化了應用程序的總體設計
但是這個也造成了它固有的一些問題
例如
使用傳統的ASP裡
我們可以通過使用POST方法很容易地實現頁面間傳遞值
同樣的事情
在使用事件驅動編程模型的ASP
NET就不是那麼容易了
當然了
我們仍然有一些方法可以實現同樣的功能
本文將試著使用不同的可能的方法來解決這個問題
但可以預見是
本文將包含使用querystring
session變量以及server
Transfer方法來實現頁面間的值傳遞
使用QueryString
使用QuerySting在頁面間傳遞值已經是一種很老的機制了
這種方法的主要優點是實現起來非常簡單
然而它的缺點是傳遞的值是會顯示在浏覽器的地址欄上的(不安全)
同時又不能傳遞對象
但是在傳遞的值少而安全性要求不高的情況下
這個方法還是一個不錯的方案
使用這種方法的步驟如下
使用控件創建web表單(form)
創建可以返回表單的按鈕和鏈接按鈕
在按鈕或鏈接按鈕的單擊事件裡創建一個保存URL的字符變量
在保存的URL裡添加QueryString參數
使用Response
Redirect重定向到上面保存的URL 下面的代碼片斷演示了如何實現這個方法
源頁面代碼
private void Button
_Click (object sender
System
EventArgs e)
{
string url;
url=
anotherwebform
aspx?name=
+ TextBox
Text +
&email=
+ TextBox
Text;
Response
Redirect(url)
}
目標頁面代碼
private void Page_Load (object sender
System
EventArgs e)
{
Label
Text=Request
QueryString[
name
];
Label
Text=Request
QueryString[
email
];
}
使用Session變量
使用Session變量是可以在頁面間傳遞值的的另一種方式
在本例中我們把控件中的值存在Session變量中
然後在另一個頁面中使用它
以不同頁面間實現值傳遞的目的
但是
需要注意的是在Session變量存儲過多的數據會消耗比較多的服務器資源
在使用session時應該慎重
當然了
我們也應該使用一些清理動作來去除一些不需要的session來降低資源的無謂消耗
使用Session變量傳遞值的一般步驟如下
在頁面裡添加必要的控件
創建可以返回表單的按鈕和鏈接按鈕
在按鈕或鏈接按鈕的單擊事件裡
把控件的值添加到session變量裡
使用Response
Redirect方法重定向到另一個頁面
在另一個頁面提取session的值
在確定不需要使用該session時
要顯式清除它 下面的代碼片斷演示了如何實現這個方法
源頁面代碼
private void Button
_Click (object sender
System
EventArgs e)
{
//textbox
and textbox
are webform controls
Session[
name
]=TextBox
Text;
Session[
email
]=TextBox
Text;
Server
Transfer(
anotherwebform
aspx
)
}
目標頁面代碼
private void Page_Load (object sender
System
EventArgs e)
{
Label
Text=Session[
name
]
ToString()
Label
Text=Session[
email
]
ToString()
Session
Remove(
name
)
Session
Remove(
email
)
}
使用Server
Transfer
這個方法相比上面介紹的方法稍微復雜一點
但在頁面間值傳遞中卻是特別有用的
使用該方法你可以在另一個頁面以對象屬性的方式來存取顯露的值
當然了
使用這種方法
你需要額外寫一些代碼以創建一些屬性以便可以在另一個頁面訪問它
但是
這個方式帶來的好處也是顯而易見的
總體來說
使用這種方法是簡潔的同時又是面向對象的
使用這種方法的整個過程如下
在頁面裡添加必要的控件
創建返回值的Get屬性過程
創建可以返回表單的按鈕和鏈接按鈕
在按鈕單擊事件處理程序中調用Server
Transfer方法轉移到指定的頁面
在第二個頁面中
我們就可以使用Context
Handler屬性來獲得前一個頁面實例對象的引用
通過它
就可以使用存取前一個頁面的控件的值了 以下代碼綜合實現上述步驟過程的代碼
源頁面代碼
把以下的代碼添加到頁面中
public string Name
{
get { return TextBox
Text; }
}
public string EMail
{
get { return TextBox
Text; }
}
然後調用Server
Transfer方法
private void Button
_Click (object sender
System
EventArgs e)
{
Server
Transfer(
anotherwebform
aspx
)
}
目標頁面代碼
private void Page_Load (object sender
System
EventArgs e)
{
//create instance of source web form
WebForm
wf
;
//get reference to current handler instance
wf
=(WebForm
)Context
Handler;
Label
Text=wf
Name;
Label
Text=wf
EMail;
}
通過本文的對頁面之間傳遞參數幾種方法的介紹
希望對你有幫助
From:http://tw.wingwit.com/Article/program/net/201311/11725.html