欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net Context.Handler 页面间传值方法第1/2页

程序员文章站 2022-05-15 08:09:09
一、目前在asp.net中页面传值共有这么几种方式: 1、表单提交,
一、目前在asp.net中页面传值共有这么几种方式:
1、表单提交,
<form action= "target.aspx" method = "post" name = "form1">
<input name = "param1" value = "1111"/>
<input name = "param2" value = "2222"/> 
</form>
....
form1.submit();
....
此种方在asp。net中无效,因为asp。net的表单总是提交到自身页面,如果要提交到别一页面,需要特殊处理。
2、<a href="target.aspx?param1=1111&param2=2222">链接地址传送</a>
接收页面: string str = request["param1"]
3、session共享
发送页面:session("param1") = "1111"; 
按收页面 string str = session("param1").tostring(); 
4、application共享
发送页面: application("param1") = "1111"; 
按收页面: string str = application("param1").tostring(); 
此种方法不常使用,因为application在一个应用程序域范围共享,所有用户可以改变及设置其值,故只应用计数器等需要全局变量的地方。
5、cookie
6、response.redirect()方式
response.redirect("target.aspx?param1=1111&param2=2222")
接收页面: string str = request["param1"]
7、server.transfer()方式。
server.transfer("target.aspx?param1=1111&param2=2222")
接收页面: string str = request["param1"]
二、如果在两个页面间需要大量的参数要传传递,如数据查询等页面时,用1 - 6的方法传值及其不便,而第 7 种方法确有一独特的优势!但使用该方法时需要一定的设置,现简单介绍一下该方法的使用方式:
以查询数据页面为例:
在查询页面中设置如下公有属性(querypage.aspx): public class querypage : system.web.ui.page
{
protected system.web.ui.webcontrols.textbox txtstadate;
protected system.web.ui.webcontrols.textbox txtenddate;
/**//**//**//// <summary>
/// 开始时间
/// </summary>
public string stadate
{
get{ return this.txtstadate.text;}
set{this.txtstadate.text = value;}
}
/**//**//**//// <summary>
/// 结束时间
/// </summary>
public string enddate
{
get{ return this.txtenddate.text;}
set{this.txtenddate.text = value;}
}

private void btnenter_click(object sender, system.eventargs e)
{
server.transfer("resultpage.aspx"); //注意:使用resultpage.aspx来接收传递过来的参数
}
}
在显示查询结果页面(resultpage.aspx):
public class resultpage : system.web.ui.page
{
private void page_load(object sender, system.eventargs e)
{

//转换一下即可获得前一页面中输入的数据
querypage querypage = ( querypage )context.handler;    //注意:引用页面句柄

response.write( "stadate:" );
response.write( querypage.stadate );
response.write( "<br/>enddate:" );
response.write( querypage.enddate );
}
}
三、如果有许多查询页面共用一个结果页面的设置方法:
在这种方式中关键在于“ querypage querypage = ( querypage )context.handler; ”的转换,只有转换不依赖于特定的页面时即可实现。
如果让所有的查询页面都继承一个接口,在该接口中定义一个方法,该方法的唯一作用就是让结果页面获得构建结果时所需的参数,就可实现多页面共享一个结果页面操作!

1、先定义一个类,用该类放置所有查询参数:(*.cs) /**//// <summary>
/// 结果页面中要用到的值
/// </summary>
public class queryparams
{
private string stadate;
private string enddate;

/**//**//**//// <summary>
/// 开始时间
/// </summary>
public string stadate
{
get{ return this.stadate;}
set{this.stadate = value;}
}
/**//**//**//// <summary>
/// 结束时间
/// </summary>
public string enddate
{
get{ return this.enddate;}
set{this.enddate = value;}
}
}
2、接口定义:
/**//// <summary>
/// 定义查询接口。
/// </summary>
public interface iqueryparams
{
/**//**//**//// <summary>
/// 参数
/// </summary>
queryparams parameters{get;}
}
3、查询页面继承iqueryparams接口(querypage.aspx):
/**//// <summary>
///查询页面,继承接口
/// </summary>
public class querypage : system.web.ui.page, iqueryparams
{
protected system.web.ui.webcontrols.textbox txtstadate;
protected system.web.ui.webcontrols.textbox txtenddate;

private queryparams queryparams;

/**//**//**//// <summary>
/// 结果页面用到的参数
/// </summary>
public queryparams parameters
{
get
{
return queryparams;
}
}

private void btnenter_click(object sender, system.eventargs e)
{
//赋值
queryparams = new queryparams();
queryparams.stadate = this.txtstadate.text;
queryparams.enddate = this.txtenddate.text

server.transfer("resultpage.aspx");
}
}
4、别外的页面也如此设置
1