我們知道,Asp.net在不同頁面間傳遞對象的時候可以用Session來實現。現在我想介紹另外一種方法來達到目的。
主要思路:我們需要兩個頁面,一個Sender.aspx負責發送所需傳遞的對象,一個Receiver.aspx負責接受send過來的對象。Sender.aspx主要是運用了Server.Transfer來終止當前頁面的執行,並開始調入Receiver.aspx來取出對象。
具體實現:
ITransfer.cs
namespace Sunrise.Sample.FormTransfer
{
/// <summary>
/// 此接口定義了一個返回所需傳遞對象的屬性
/// 發送對象的頁面必須實現此接口
/// </summary>
public interface ITransfer
{
MyClass MyObject
{
get;
set;
}
}
}
MyClass.cs
namespace Sunrise.Sample.FormTransfer
{
/// <summary>
/// 一個用來演示的簡單類
/// </summary>
public class MyClass
{
private string _strMessage;
public MyClass()
{
}
public string Message
{
get
{
return this._strMessage;
}
set
{
this._strMessage = value;
}
}
}
}
後台代碼文件Receiver.aspx.cs
namespace Sunrise.Sample.FormTransfer
{
/// <summary>
/// 接收對象的頁面
/// </summary>
public class Receiver : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
ITransfer mySender;
if(!IsPostBack)
{
//判斷當前頁面的HttpHandler,如果實現了ITransfer接口
//就轉換成ITransfer
if(Context.Handler is ITransfer)
{
mySender = (ITransfer)Context.Handler;
Response.Write(mySender.MyObject.Message);
}
else
{
Response.Redirect("Sender.aspx");
}
}
}
.
.
.
}
}
後台代碼文件Sender.aspx.cs
namespace Sunrise.Sample.FormTransfer
{
/// <summary>
/// 發送對象的頁面
/// </summary>
public class Sender : System.Web.UI.Page, ITransfer //繼承ITransfer
{
protected System.Web.UI.WebControls.Button btnSend;
private MyClass _objMyObject;
private void Page_Load(object sender, System.EventArgs e)
{
_objMyObject = new MyClass();
}
//實現ITransfer接口
public MyClass MyObject
{
get
{
return this._objMyObject;
}
set
{
this._objMyObject = value;
}
}
/// <summary>
/// 響應按鈕事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSend_Click(object sender, System.EventArgs e)
{
this.MyObject.Message = "test";
//調用Server.Transfer(),轉向執行Receiver.aspx
Server.Transfer("Receiver.aspx");
}
.
.
.
}
}
編譯通過後,執行Sender.aspx,單擊btnSend按鈕,就可以看到執行結果了:Receiver.aspx頁面拿到了MyObject對象,並且在頁面上顯示出MyObject.Message的值為“test”;