我们知道,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”;
需要完整project源码请联系作者: [email protected]
菜鸟学堂:新闻热点
疑难解答
图片精选