Asp.net在頁(yè)面間傳遞大量數(shù)據(jù)(數(shù)據(jù)表)建議采用的方法
更新時(shí)間:2013年02月02日 17:22:54 作者:
能讓數(shù)據(jù)在 兩個(gè)不同站點(diǎn)之間傳遞嗎,針對(duì)這個(gè)問(wèn)題將會(huì)展開(kāi)本文的探討有想在A站點(diǎn)的數(shù)據(jù)傳遞到B站點(diǎn)的朋友們可以適當(dāng)參考下,或許本文對(duì)你有所幫助
能讓數(shù)據(jù)在 兩個(gè)不同站點(diǎn)之間傳遞嗎? 我現(xiàn)在是想A站點(diǎn)的數(shù)據(jù) 傳遞到B站點(diǎn).......
建議使用Cache
(1)不太影響程序性能不太可能,你都說(shuō)了,是大量數(shù)據(jù)。我舉個(gè)例子,你是從A.aspx傳到B.aspx。那么如果有兩個(gè)用戶(hù)都會(huì)訪(fǎng)問(wèn)A,那你的數(shù)據(jù)是否要做到不會(huì)影響到不同的客戶(hù)端?如果是這樣的話(huà),那么你存儲(chǔ)的地方勢(shì)必不能用Cache(不是絕對(duì)不能用,但是你必須區(qū)分客戶(hù)端,你要做的工作更多),只能用Session, Cookies, ViewState, QueryString, Form等方法。
第二個(gè)條件:如果不止一個(gè)頁(yè)面要做這個(gè)操作,比如A.aspx和B.aspx都需要傳遞“大量數(shù)據(jù)”給C.aspx,那么你如果存在Session里,又不能使之互相覆蓋。所以如果是少量數(shù)據(jù),比如只是一個(gè)數(shù)字,那么用ViewState, QueryString, Form都可以,只是他們需要多一趟往返于服務(wù)器和客戶(hù)端。而象你這樣大量數(shù)據(jù)的話(huà),QueryString估計(jì)是不能用了。而ViewState其實(shí)也是Form。你可以考慮一下實(shí)際情況選擇具體合用的方法。
(2)使用Server.Transfer方法
這個(gè)才可以說(shuō)是面象對(duì)象開(kāi)發(fā)所使用的方法,其使用Server.Transfer方法把流程從當(dāng)前頁(yè)面引導(dǎo)到另一個(gè)頁(yè)面中,新的頁(yè)面使用前一個(gè)頁(yè)面的應(yīng)答流,所以這個(gè)方法是完全面象對(duì)象的,簡(jiǎn)潔有效。下面這個(gè)代碼是展示在需要很多個(gè)參數(shù)的時(shí)候,使用的方法,如果參數(shù)比較少就沒(méi)必要使用這個(gè)方法了.
如果讓所有的查詢(xún)頁(yè)面都繼承一個(gè)接口,在該接口中定義一個(gè)方法,該方法的唯一作用就是讓結(jié)果頁(yè)面獲得構(gòu)建結(jié)果時(shí)所需的參數(shù),就可實(shí)現(xiàn)多頁(yè)面共享一個(gè)結(jié)果頁(yè)面操作!
1、先定義一個(gè)類(lèi),用該類(lèi)放置所有查詢(xún)參數(shù):
/**//// <summary>
/// QueryParams 的摘要說(shuō)明
/// </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 >
/// 定義查詢(xún)接口。
/// </summary >
public interface IQueryParams
{
/**//// <summary >
/// 參數(shù)
/// </summary >
QueryParams Parameters { get;}
}
3、查詢(xún)頁(yè)面繼承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、接收頁(yè)面(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;
//實(shí)現(xiàn)該接口的頁(yè)面
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)不太影響程序性能不太可能,你都說(shuō)了,是大量數(shù)據(jù)。我舉個(gè)例子,你是從A.aspx傳到B.aspx。那么如果有兩個(gè)用戶(hù)都會(huì)訪(fǎng)問(wèn)A,那你的數(shù)據(jù)是否要做到不會(huì)影響到不同的客戶(hù)端?如果是這樣的話(huà),那么你存儲(chǔ)的地方勢(shì)必不能用Cache(不是絕對(duì)不能用,但是你必須區(qū)分客戶(hù)端,你要做的工作更多),只能用Session, Cookies, ViewState, QueryString, Form等方法。
第二個(gè)條件:如果不止一個(gè)頁(yè)面要做這個(gè)操作,比如A.aspx和B.aspx都需要傳遞“大量數(shù)據(jù)”給C.aspx,那么你如果存在Session里,又不能使之互相覆蓋。所以如果是少量數(shù)據(jù),比如只是一個(gè)數(shù)字,那么用ViewState, QueryString, Form都可以,只是他們需要多一趟往返于服務(wù)器和客戶(hù)端。而象你這樣大量數(shù)據(jù)的話(huà),QueryString估計(jì)是不能用了。而ViewState其實(shí)也是Form。你可以考慮一下實(shí)際情況選擇具體合用的方法。
(2)使用Server.Transfer方法
這個(gè)才可以說(shuō)是面象對(duì)象開(kāi)發(fā)所使用的方法,其使用Server.Transfer方法把流程從當(dāng)前頁(yè)面引導(dǎo)到另一個(gè)頁(yè)面中,新的頁(yè)面使用前一個(gè)頁(yè)面的應(yīng)答流,所以這個(gè)方法是完全面象對(duì)象的,簡(jiǎn)潔有效。下面這個(gè)代碼是展示在需要很多個(gè)參數(shù)的時(shí)候,使用的方法,如果參數(shù)比較少就沒(méi)必要使用這個(gè)方法了.
如果讓所有的查詢(xún)頁(yè)面都繼承一個(gè)接口,在該接口中定義一個(gè)方法,該方法的唯一作用就是讓結(jié)果頁(yè)面獲得構(gòu)建結(jié)果時(shí)所需的參數(shù),就可實(shí)現(xiàn)多頁(yè)面共享一個(gè)結(jié)果頁(yè)面操作!
1、先定義一個(gè)類(lèi),用該類(lèi)放置所有查詢(xún)參數(shù):
復(fù)制代碼 代碼如下:
/**//// <summary>
/// QueryParams 的摘要說(shuō)明
/// </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、接口定義:
復(fù)制代碼 代碼如下:
/**//// <summary >
/// 定義查詢(xún)接口。
/// </summary >
public interface IQueryParams
{
/**//// <summary >
/// 參數(shù)
/// </summary >
QueryParams Parameters { get;}
}
3、查詢(xún)頁(yè)面繼承IQueryParams接口(QueryPage.aspx):
QueryPage.aspx
復(fù)制代碼 代碼如下:
<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
復(fù)制代碼 代碼如下:
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、接收頁(yè)面(ResultPage.aspx):
ResultPage.aspx.cs
復(fù)制代碼 代碼如下:
public partial class ResultPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
QueryParams queryParams = new QueryParams();
IQueryParams queryInterface;
//實(shí)現(xiàn)該接口的頁(yè)面
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);
}
}
相關(guān)文章
C# 生成驗(yàn)證碼取隨機(jī)數(shù)字加字母(改進(jìn)版)
生成驗(yàn)證碼取4位數(shù)字沒(méi)有問(wèn)題,結(jié)果加上字母效率非常低本人改進(jìn)了一下,感興趣的朋友可以參考下哈2013-03-03asp.net 從POST的數(shù)據(jù)流中提取參數(shù)和文件
按理,F(xiàn)orm提交的數(shù)據(jù),無(wú)論是application/x-www-form-urlencoded還是multipart/form-data(有附件時(shí)),都可在服務(wù)端通過(guò)Request.Form["name"]和Request.Files["name"]獲取到參數(shù)和上傳的文件。2010-02-02asp.net core 2.0 webapi集成signalr(實(shí)例講解)
下面小編就為大家分享一篇asp.net core 2.0 webapi集成signalr的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11asp.net+jquery ajax無(wú)刷新登錄的實(shí)現(xiàn)方法
asp.net+jquery ajax無(wú)刷新登錄的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-06-06基于asp.net下使用jquery實(shí)現(xiàn)ajax的解決方法
本文以最簡(jiǎn)單的方法為新手示范如何使用jquery實(shí)現(xiàn)ajax技術(shù)(所以本文是專(zhuān)為新手所寫(xiě),老鳥(niǎo)勿噴,大神此處省略一萬(wàn)字)。至于什么是jquery什么是ajax,自己谷歌去2013-05-05ASP.NET連接MySql數(shù)據(jù)庫(kù)的2個(gè)方法及示例
這篇文章主要介紹了ASP.NET連接MySql數(shù)據(jù)庫(kù)的2個(gè)方法及示例,使用的是MySQL官方組件和ODBC.NET,需要的朋友可以參考下2014-03-03asp.net(vb.net)獲取真實(shí)IP的函數(shù)
asp.net(vb.net)獲取真實(shí)IP的函數(shù),需要的朋友可以參考下。2010-11-11