ASP.NET页面间传递对象的另类方法

我们知道,Asp.net在不同页面间传递对象的时候可以用Session来实现。现在我想介绍另外一种方法来达到目的。

主要思路:我们需要两个页面,一个Sender.aspx负责发送所需传递的对象,一个Receiver.aspx负责接受send过来的对象。Sender.aspx主要是运用了Server.Transfer来终止当前页面的执行,并开始调入Receiver.aspx来取出对象。

具体实现:

ITransfer.cs
namespace Sunrise.Sample.FormTransfer
{
///

1<summary>   
2/// 此接口定义了一个返回所需传递对象的属性   
3/// 发送对象的页面必须实现此接口   
4/// </summary>

public interface ITransfer
{
MyClass MyObject
{
get;
set;
}
}
}

MyClass.cs
namespace Sunrise.Sample.FormTransfer
{
///

1<summary>   
2/// 一个用来演示的简单类   
3/// </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
{
///

1<summary>   
2/// 接收对象的页面   
3/// </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
{
///

1<summary>   
2/// 发送对象的页面   
3/// </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;
}
}

///

1<summary>   
2/// 响应按钮事件   
3/// </summary>

///

1<param name="sender"/>

///

1<param name="e"/>

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”;

需要完整Project源码请联系作者: [email protected]
http://sunrise.szu.edu.cn

Published At
Categories with Web编程
Tagged with
comments powered by Disqus