Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2384351
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: 系统运维

2009-10-12 15:57:29

不管什么时候,总能看到网上有人在问页面之间怎么传递变量,针对这一情况,我想把所有能想到的传递变量的方法汇总一下,然后再介绍各种方法的使用范围,供大家参考,也希望大家在此给点建议,来帮助后来或刚开始学.net的朋友。

        我总共就总结了这么几种方法:

(1)Session

(2)Cookie

(3)Application

(4)URL地址中的参数

(5)通过隐藏字段来传递数据

(6)Server.Transfer

(7)通过序列化对象

(8)........



下面就分别一一介绍:

(1)使用Session

        session对象是用来记录浏览器端的变量,是个别浏览器端专用的变量,对于每一个浏览器访问时都会自动产生一个seseion对象,该对象提供一个存储场所,用来存储仅仅对该访问者在会话的活动期间打开的网页可用的变量和对象。这样就用可以用来在Web间传递专对单个浏览器端使用的数据。其定义方法:session(“变量名”)=数值

  如:Session["testTransmitVaraint"] = "testSession";

  session对象所定义的变量只是浏览器端的专用变量,所以适用于局部会话间的网页数据传递。



(2)使用Cookie

  cookie是在浏览页面时Web服务器在浏览器端所写入的一些小文件,cookie是存放在浏览器端本机磁盘上,而不是存放在服务端的。可以在发送数据时写入cookie,接收时读取cookie完成数据在Web页面间的传送。

发送页面

HttpCookie cookie = new HttpCookie("testCookie");

cookie.Value = TextBox1.Text;

Response.SetCookie(cookie);

取Cookie页

HttpCookie cookie = Request.Cookies["testCookie"];

Response.Write("
HttpCookie = " + cookie.Value);



(3)使用Application

        application对象是用来记录整个网站信息的,是记录不同浏览器端共享的变量,无论有几个浏览者同时存取网页,都只会产生一个application对象实例。用户可以通过定义application整站共享变量来实现网页间的数据传递。其定义方法是:application(“变量名”)=数值

  如:Application["testApplication"] = "testApplication";

  application对象所定义的变量对于所有浏览端都是可见的,所以其使用场合是所有浏览端共享的全局数据传递。 



(4)使用URL地址中的参数

        URL方式是实现Web间数据传递最基本的方法,操作简单,可很方便地实现不同Web页面间的数据传递,但其安全性比较差。将要传递的数据附加在网页地址(URL)后面进行传递。如:,其中?后面所跟着的字符串便是传递的数据,=前的是变量名,=后面是数值,可以使用request对象来获取传递的数据。如:request(“username”)。这种方法在传递数据过程中其数据内容在URL栏中是显示的,用户能看到提交的内容。 



        以上四种方法的适用范围:简单变量如基本的数据类型的数据



(5)使用隐藏字段来传递数据

  通过在网页上制作表单交互区域,用户在浏览器端输入数据,然后通过form提交到服务器,在提交后的接受form数据的页面里就可以接收到相应数据,即form的action页面中可以使用request对象来接收所传递的数据。

  如:

  发送页面:

<body MS_POSITIONING="GridLayout">

    
<form id="Form1" method="post" runat="server">

        
<table border="0" align="center" width="100%">

            
<tr>

                
<td align="center"><input type="hidden" name="UserID" value="测试隐藏字段">td>

            
tr>

            
<tr>

                
<td align="center">

                    
<asp:Button id="Button1" runat="server" Text="ServerButton Goto Page">asp:Button>td>

            
tr>

            
<tr>

                
<td align="center">td>

            
tr>

        
table>

    
form>

body>

然后在cs文件中添加下面的代码:

private void Button1_Click(object sender, System.EventArgs e)

{

    Server.Transfer(
"RequestHidden.aspx");

}

  接收页面:request(“UserID”)

  利用form页面的文本框来接收用户数据的输入,通过submit按钮提交后在targetweb页面中使用request来接收数据。 



        适用范围:基本的数据类型的数据,不宜传递对象变量等复杂的数据



(6)使用Server.Transfer

        这个方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。

        使用这种方法的整个过程如下:

1,在页面里添加必要的控件

2,创建返回值的Get属性过程

3,创建可以返回表单的按钮和链接按钮

4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面

5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了

        此方法的适用范围:简单变量如基本的数据类型的数据,复杂变量如结构、类变量、DataSet、DataTable等

        具体的事例,请见原代码。  



        此方法的适用范围:简单变量如基本的数据类型的数据,复杂变量如结构、类变量、DataSet、DataTable等



(7)通过序列化对象

        序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。

        在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡。只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行。例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化。

        为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。例如,序列化可用于在ASP.NET 中保存会话状态,以及将对象复制到 Windows 窗体的剪贴板中。它还可用于按值将对象从一个应用程序域远程传递至另一个应用程序域。

        关于序列化对象更详细的介绍,请参见微软的“” 



(8)结束语

  上述介绍的是网页间数据传递的常用方法,各有千秋。其中URL方式和form方式实现方法简单,可实现网页间的简单数据传递,一般为字符串类型,其特点是安全性差,而且必须是连续访问两页面间数据传递。Cookie只能存放string类型的数据,如果想要存放更为复杂的数据类型,那么必须先将其转换为string类型。Application对象和Session对象操作相对复杂些,浏览量非常大的网页使用时应适量,而且使用结束后尽量清除,否则大量使用有可能会导致服务器的瘫痪。Session变量的安全性较高,可传递专用浏览端数据。具体应用决定了数据传递方式的选择,合理数据传递方式选择是Web页面的设计中的关键考虑因素。

阅读(1064) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~