列举ASP.NET 页面之间传递值的几种方式?

因为ASP.NET的页面表单提交到自身,完成回传的功能,所以默认情况下不能使用POST方式进行多页面传值。

1.使用QueryString, 如....?id=1; response. Redirect()....

将传送的值显示在浏览器的地址栏中,不能传递数组或对象。使用简单,对于安全性要求不高时传递数字或是文本值非常有效。

使用方法:1.在源页面的代码中用需要传递的名称和值构造URL地址。       

 2.在源页面的代码用Response.Redirect(URL);重定向到上面的URL地址中。        

3.在目的页面的代码使用Request.QueryString["name"];取出URL地址中传递的值。

2.使用Session变量

作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽,容易丢失。使用简单,不仅能传递简单数据类型,还能传递对象。数据量大小是不限制的。

使用方法:

1.在源页面的代码中创建你需要传递的名称和值构造Session变量:Session["Name"]="Value(Or Object)";

     2.在目的页面的代码使用Session变量取出传递的值。Result = Session["Name"]

   注意:session不用时可以销毁它,销毁的方法是:清除一个:Session.Remove("session名");

                          清除所有:Session.Clear();

3.使用Cookie

Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。Cookie通过HTTP头在浏览器和服务器之间来回传递的。Cookie只能包含字符串的值。

Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。

保持用户状态的一种非常常用的方法。比如在购物网站中用户跨多个页面表单时可以用它来保持用户状态。

使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Cookie对象;

2.在目的页面的代码使用Cookie对象取出传递的值:Result = Request.Cookies[ "myCookie" ].Value;

消耗较少的服务器资源,不仅能传递简单数据,还能传递对象。数据量大小是不限制的。单个用户使用的变量一般不能用application。

4.使用Application

作用范围是整个全局,也就是说对所有用户都有效。它在整个应用程序生命周期中都是有效的。可以在不同页面中对它进行存取。

它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。

使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Application变量:Application["Nmae"]="Value(Or Object)";

      2.在目的页面的代码使用Application变量取出传递的值。Result = Application["Nmae"]

  注意:常用lock和unlock方法用来锁定和解锁,为了防止并发修改。

private void Page_Load(object sender, EventArgs e)

{

  string name;

  Application.Lock();

  name = Application["name"].ToString();

  Application.UnLock();

}

5.使用Server.Transfer

其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的。Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端执行新页并输出,在新页面中通过Context.Handler来获得前一个页面传递的各种数据类型的值、表单数据、QueryString.由于重定向完全在服务器端完成,所以客户端浏览器中的URL地址是不会改变的。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。

 ps:比较Server.Transfer和Response.Redirect的区别。     

(1)Server.Transfer在服务器端完成,所以客户端浏览器中的URL地址是不会改变的;Response.Redirect是客户端完成,向服务器端提出新的页面处理请求,所以客户端浏览器中的URL地址是会改变的。     

(2)Server.Transfer在服务器端完成,不需要客户端提出请求,减少了客户端对服务器端提出请求。  

   (3)Server.Transfer只能够转跳到本地虚拟目录指定的页面,也就是工程项目中的页面,而Response.Redirect则十分灵活,可以跳转到任何URL地址。   

  (4)Server.Transfer可以将前一个页面的各种类型的值传到新的页面;Response.Redirect则只能借助URL中带参数或是结合上面四种办法把各种类型的值传到新的页面。

可以传递各种数据类型的值和控件的值。1.客户端浏览器中的URL地址是不改变,会导致在新的页面可能出现一些意想不到的问题。比如如果源页面和目的页面不在同一个虚拟目录或其子目录下,那么使用相对路径的图片、超链接都会导致错误的指向。

使用方法:1.在源页面的代码中,使用Page类的Server.Transfer跳到另一个页面传递页面数据:Server.Transfer("b.aspx","false")。

       2.在目的页面中,使用Context.Handler来接收数据:FormerPage formerPage = (FormerPage)Context.Handler; 然后用formerPage的属性和方法来获取前一个页面的值,或者直接用Context.Items["myParameter "]

6使用HttpContext的Item属性

7.使用文件

8.使用数据库,通过数据库存储临时数据等。

9.使用Cache

http://www.cnblogs.com/zhangkai2237/archive/2012/05/06/2486462.html

1.URL传值 这是经典的传值方式,这种方法的使用非常简单,不过所传递的值是会显示在浏览器的地址栏上的,而且不能传递对象。
所以这种方法一般用于传递的值少且安全性要求不高的情况下。
在*.aspx页面开发中可以使用超级链接文本进行传值,如以下代码所示。
<asp:HyperLink runat="server"
NavigateUrl="~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd">URL传值</asp:HyperLink>
以上链接文本将页面跳转到GetValues.aspx页面,并且通过URL传递urlvalue1变量和urlvalue2变量,其值分别为intel和amd。
在*.cs的服务器端方法中也可以调用HttpResponse对象的Redirect方法,将浏览器端重定向到新页面并通过URL传值,如以下代码所示。
Response.Redirect(“~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd”);
3.Cookie传值 Cookie是一种比较特殊的数据存储方式,因为这种方式将数据存储于浏览用户的电脑中,以文本文件的形式存在于磁盘中。
这种方式非常有意思,很多登录系统就是利用Cookie实现用户自动登录。即用户登录一次的登录信息将被写入到用户电脑的Cookie文件中,
下次登录时,网站自动读取该Cookie完成身份验证。通过Cookie传递数据虽然很方便,保存时间可以自由设置,但是安全性不高,
编程者不应过于依赖Cookie,而应采用结合的方式完成敏感数据的存储。
ASP.NET中操作Cookie的主要类型位于System.Web命名空间下,分别为HttpCookie、HttpResponse以及HttpRequest。
HttpCookie可建立和操作独立Cookie的安全类型,访问HttpResponse和HttpRequest的Cookies属性可以获取HttpCookieCollection集合对象,以读取或添加HttpCookie对象。
6.跨页面传送 跨页面传送和调用HttpServerUtility对象的Transfer方法有相似之处,不过效率更高。
因为调用HttpServerUtility对象的Transfer方法是基于服务器的方法,而跨页面传送是基于浏览器端的。
这个方法主要是设置控件的“PostBackUrl”属性,使该控件(如Button)操作后转向指定页面,
并且这个指定页面可以直接获取前一个页面的所有控件对象及其属性值。
假设第一个页面为SendValues.aspx,在该页面中(非*.cs代码文件)添加两个控件,设置如以下代码所示。
<asp:TextBox runat="server" Text="Geforce TX280">
</asp:TextBox> <asp:Button runat="server" Text="跨页面传送方式" PostBackUrl="~/GetValues.aspx" />
以上代码中,TextBox控件的“Text”属性为“Geforce TX280”,这是所需要传送的值。
而Button控件的“PostBackUrl”属性指定了GetValues.aspx页面,该页面即可接收所需传递的值。
在GetValues.aspx.cs的Page_Load方法中,编写以下代码。
//PreviousPage为向当前页面传输控件的页面
if (PreviousPage != null)
{
//从PreviousPage容器中搜索“ID”为PbValue的控件,并转换为TextBox类型
TextBox tb = (TextBox)PreviousPage.FindControl("PbValue");
//如果tb不是空引用
if (tb != null)
{
//将tb的“Text”属性值给str变量 string str = tb.Text;
}
}
以上代码轻松获得了前一个页面中TextBox控件的“Text”属性值,这种方法比调用HttpServerUtility对象的Transfer方法更加快捷,并减少了处理步骤。

http://zhidao.baidu.com/link?url=x0i9x9icxJLeP94ruG1Xe_v1_5yjz-WPa8p7vS7owUQ5vbl9RYPoKClb0A2NIEwTUGPurp9UhPdE5T8Hbuv5aTeUSduTw9sneQm_d0OxyNO

http://blog.csdn.net/zengjibing/article/details/3915902