ASP.NET页面之间传值的五种常用方法

1、使用QueryString变量
     QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。
     优点:1)使用简单,对于安全性要求不高时传递数字或是文本值非常有效。
     缺点:1).缺乏安全性,由于它的值暴露在浏览器的URL地址中的。
             2).不能传递对象。
     用途:后台管理页中,获取修改信息的ID

     实例:

     a.aspx的C#代码

1 private void Button1_Click(object sender, System.EventArgs e)
2 {
3 string s_url;
4 s_url = "b.aspx?name=" + Label1.Text;
5 Response.Redirect(s_url);
6 }

   b.aspx中C#代码                                                                                                                            

1 private void Page_Load(object sender, EventArgs e)
2 {
3 Label2.Text = Request.QueryString["name"];
4 }

 

 2、使用Application 对象变量
      Application变量在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。
      举个例子来解释:
      网站访问的计数器变量一般采用Application变量,多个请求访问时共享这一个变量,均可对它进行操作,该变量可以被整个应用程序的各个页面直接使用。
      用户登陆的帐号名一般采用Session变量,多个请求访问时有各自的Session变量,只能对自己的该Session变量进行操作,整个应用程序的各个页面直接使用这个变量来获得用户的基本信息。
      优点:1).使用简单,消耗较少的服务器资源。
              2).不仅能传递简单数据,还能传递对象。
              3).数据量大小是不限制的。
      缺点:1).作为全局变量容易被误操作。
      用途:网站访问的计数器变量一般采用Application变量。

      实例:

      a.aspx的C#代码

1 private void Button1_Click(object sender, System.EventArgs e)
2 {
3 string Name1Value = "HelloName1";
4 int Name2Value = 1234567;
5 Application["Name1"] = Name1Value;
6 Application["Name2"] = Name2Value;
7 }

    b.aspx中C#代码

1 private void Page_Load(object sender, System.EventArgs e)
2 {
3 string myName1Value;
4 int myName2Value;
5 myName1Value = Application["Name1"].ToString();
6 myName2Value = (int)Application["Name2"];
7 }

  

3、使用Session变量
     这个应该是最常见的方法了!Session用于保存每个用户的专用信息.她的生存期是用户持续请求时间再加上一段时间(默认是20分钟).Session变量和Application变量非常类似,它们的区别也已经在上面关于Application变量时提到了。
     优点:1).使用简单,不仅能传递简单数据类型,还能传递对象。
             2).数据量大小是不限制的。
     缺点:1).在Session变量存储大量的数据时会消耗较多的服务器资源。
     用途:会员和管理员登陆时的用户名采用Session变量保存,还有验证码也可采用Session变量保存,从而与用户输入的值进行比较

     实例:

     a.aspx的C#代码

1 private void Button1_Click(object sender, System.EventArgs e)
2 {
3 Session["name"] = Label.Text;
4 }

    b.aspx中C#代码

1 private void Page_Load(object sender, EventArgs e)
2 {
3 string name;
4 name = Session["name"].ToString();
5 }

 

 4、使用Cookie对象变量
     这个也是大家常使用的方法,与Session一样,Cookie对象也是对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。
     优点:1).使用简单,是保持用户状态的一种非常常用的方法。
     缺点:1).常常被人认为用来收集用户隐私而遭到批评。
     用途:在购物网站中用户跨多个页面表单时可以用它来保持用户状态。

     实例:

     a.aspx的C#代码

1 private void Button1_Click(object sender, System.EventArgs e)
2 {
3 HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");
4 Response.Cookies.Add(objCookie);
5 }

    b.aspx中C#代码

1 private void Page_Load(object sender, System.EventArgs e)
2 {
3 string myName1Value;
4 myName1Value = Request.Cookies[ "myCookie" ].Value;
5 }


5、使用Server.Transfer方法
     Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端执行新页并输出,在新页面中通Context.Handler来获得前一个页面传递的各种数据类型的值、表单数据、QueryString.由于重定向完全在服务器端完成,所以客户端浏览器中的URL地址是不会改变的。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
     优点:1).直接在服务器端重定向,使用简单方便,减少了客户端对服务器端提出请求。
             2).可以传递各种数据类型的值和控件的值。
     缺点:1).客户端浏览器中的URL地址是不改变,会导致在新的页面可能出现一些意想不到的问题。比如如果源页面和目的页面不在同一个虚拟目录或其子目录下,那么使用相对路径的图片、超链接都会导致错误的指向。

     实例:

     a.aspx的C#代码

1 public string Name
2 {
3 get{ return Label1.Text;}
4 }
5  private void Button1_Click(object sender, System.EventArgs e)
6 {
7 Server.Transfer("b.aspx");
8 }

    b.aspx中C#代码

1 private void Page_Load(object sender, EventArgs e)
2 {
3 a newWeb; //实例a窗体
4   newWeb = (source)Context.Handler;
5 string name;
6 name = newWeb.Name;
7 }

 

 

      总结了一哈页面间传值的几种常用方法,其中70%的内容是参考以下网站:http://blog.csdn.net/lsd123/archive/2009/08/12/4440019.aspx

http://www.chinaz.com/Program/.NET/030110J042010.html,再经本人总结,添加了一些其他的内容。

      小弟第一次发帖,希望各位支持一哈,嘻嘻......

                                                                                                                                       
posted @ 2010-07-08 20:11  有风起浪  阅读(733)  评论(7编辑  收藏  举报