Asp.net在页面间传递大量数据(数据表)建议采用的方法
程序员文章站
2024-03-31 17:53:52
能让数据在 两个不同站点之间传递吗? 我现在是想a站点的数据 传递到b站点....... 建议使用cache (1)不太影响程序性能不太可能,你都说了,是大量数据。我举个例...
能让数据在 两个不同站点之间传递吗? 我现在是想a站点的数据 传递到b站点.......
建议使用cache
(1)不太影响程序性能不太可能,你都说了,是大量数据。我举个例子,你是从a.aspx传到b.aspx。那么如果有两个用户都会访问a,那你的数据是否要做到不会影响到不同的客户端?如果是这样的话,那么你存储的地方势必不能用cache(不是绝对不能用,但是你必须区分客户端,你要做的工作更多),只能用session, cookies, viewstate, querystring, form等方法。
第二个条件:如果不止一个页面要做这个操作,比如a.aspx和b.aspx都需要传递“大量数据”给c.aspx,那么你如果存在session里,又不能使之互相覆盖。所以如果是少量数据,比如只是一个数字,那么用viewstate, querystring, form都可以,只是他们需要多一趟往返于服务器和客户端。而象你这样大量数据的话,querystring估计是不能用了。而viewstate其实也是form。你可以考虑一下实际情况选择具体合用的方法。
(2)使用server.transfer方法
这个才可以说是面象对象开发所使用的方法,其使用server.transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。下面这个代码是展示在需要很多个参数的时候,使用的方法,如果参数比较少就没必要使用这个方法了.
如果让所有的查询页面都继承一个接口,在该接口中定义一个方法,该方法的唯一作用就是让结果页面获得构建结果时所需的参数,就可实现多页面共享一个结果页面操作!
1、先定义一个类,用该类放置所有查询参数:
/**//// <summary>
/// queryparams 的摘要说明
/// </summary>
public class queryparams
{
private string firstname;
private string lastname;
private int age;
public string firstname
{
get { return this.firstname; }
set { this.firstname = value; }
}
public string lastname
{
get { return this.lastname; }
set { this.lastname = value; }
}
public string age
{
get { return this.age; }
set { this.age = value; }
}
}
2、接口定义:
/**//// <summary >
/// 定义查询接口。
/// </summary >
public interface iqueryparams
{
/**//// <summary >
/// 参数
/// </summary >
queryparams parameters { get;}
}
3、查询页面继承iqueryparams接口(querypage.aspx):
querypage.aspx
<form id="form1" runat="server">
<div>
<asp:textbox id="txtfirstname" runat="server"></asp:textbox>
<asp:textbox id="txtlastname" runat="server"></asp:textbox>
<asp:textbox id="txtage" runat="server"></asp:textbox>
<asp:button id="btnenter" runat="server" text="button" onclick="btnenter_click" /></div>
</form>
querypage.aspx.cs
public partial class querypage : system.web.ui.page, iqueryparams
{
private queryparams queryparams;
public queryparams parameters
{
get
{
return queryparams;
}
}
public void btnenter_click(object sender, system.eventargs e)
{
//赋值
queryparams = new queryparams();
queryparams.firstnname = this.txtfirstname.text;
queryparams.lastname = this.txtlastname.text;
queryparams.age = this.txtage.text;
server.transfer( "resultpage.aspx ");
}
protected void page_load(object sender, eventargs e)
{ }
}
4、接收页面(resultpage.aspx):
resultpage.aspx.cs
public partial class resultpage : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
queryparams queryparams = new queryparams();
iqueryparams queryinterface;
//实现该接口的页面
if (context.handler is iqueryparams)
{
queryinterface = (iqueryparams)context.handler;
queryparams = queryinterface.parameters;
}
response.write("firstname: ");
response.write(queryparams.firstname);
response.write(" <br/ >lastname: ");
response.write(queryparams.lastname);
response.write(" <br/ >age: ");
response.write(queryparams.age);
}
}
建议使用cache
(1)不太影响程序性能不太可能,你都说了,是大量数据。我举个例子,你是从a.aspx传到b.aspx。那么如果有两个用户都会访问a,那你的数据是否要做到不会影响到不同的客户端?如果是这样的话,那么你存储的地方势必不能用cache(不是绝对不能用,但是你必须区分客户端,你要做的工作更多),只能用session, cookies, viewstate, querystring, form等方法。
第二个条件:如果不止一个页面要做这个操作,比如a.aspx和b.aspx都需要传递“大量数据”给c.aspx,那么你如果存在session里,又不能使之互相覆盖。所以如果是少量数据,比如只是一个数字,那么用viewstate, querystring, form都可以,只是他们需要多一趟往返于服务器和客户端。而象你这样大量数据的话,querystring估计是不能用了。而viewstate其实也是form。你可以考虑一下实际情况选择具体合用的方法。
(2)使用server.transfer方法
这个才可以说是面象对象开发所使用的方法,其使用server.transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。下面这个代码是展示在需要很多个参数的时候,使用的方法,如果参数比较少就没必要使用这个方法了.
如果让所有的查询页面都继承一个接口,在该接口中定义一个方法,该方法的唯一作用就是让结果页面获得构建结果时所需的参数,就可实现多页面共享一个结果页面操作!
1、先定义一个类,用该类放置所有查询参数:
复制代码 代码如下:
/**//// <summary>
/// queryparams 的摘要说明
/// </summary>
public class queryparams
{
private string firstname;
private string lastname;
private int age;
public string firstname
{
get { return this.firstname; }
set { this.firstname = value; }
}
public string lastname
{
get { return this.lastname; }
set { this.lastname = value; }
}
public string age
{
get { return this.age; }
set { this.age = value; }
}
}
2、接口定义:
复制代码 代码如下:
/**//// <summary >
/// 定义查询接口。
/// </summary >
public interface iqueryparams
{
/**//// <summary >
/// 参数
/// </summary >
queryparams parameters { get;}
}
3、查询页面继承iqueryparams接口(querypage.aspx):
querypage.aspx
复制代码 代码如下:
<form id="form1" runat="server">
<div>
<asp:textbox id="txtfirstname" runat="server"></asp:textbox>
<asp:textbox id="txtlastname" runat="server"></asp:textbox>
<asp:textbox id="txtage" runat="server"></asp:textbox>
<asp:button id="btnenter" runat="server" text="button" onclick="btnenter_click" /></div>
</form>
querypage.aspx.cs
复制代码 代码如下:
public partial class querypage : system.web.ui.page, iqueryparams
{
private queryparams queryparams;
public queryparams parameters
{
get
{
return queryparams;
}
}
public void btnenter_click(object sender, system.eventargs e)
{
//赋值
queryparams = new queryparams();
queryparams.firstnname = this.txtfirstname.text;
queryparams.lastname = this.txtlastname.text;
queryparams.age = this.txtage.text;
server.transfer( "resultpage.aspx ");
}
protected void page_load(object sender, eventargs e)
{ }
}
4、接收页面(resultpage.aspx):
resultpage.aspx.cs
复制代码 代码如下:
public partial class resultpage : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
queryparams queryparams = new queryparams();
iqueryparams queryinterface;
//实现该接口的页面
if (context.handler is iqueryparams)
{
queryinterface = (iqueryparams)context.handler;
queryparams = queryinterface.parameters;
}
response.write("firstname: ");
response.write(queryparams.firstname);
response.write(" <br/ >lastname: ");
response.write(queryparams.lastname);
response.write(" <br/ >age: ");
response.write(queryparams.age);
}
}