页面传值

2024-05-19

页面传值(精选四篇)

页面传值 篇1

ASP.NET是Microsoft公司的一项崭新技术, 用于创建服务器端的Web应用程序。它是该公司提供的基于服务器的功能强大的技术, 用于为企业的内部网创建动态的、交互的HTML页面。也有人叫它ASP+, 是ASP (Active Server Page) 的改进产物, 它支持多种编程语言, 如C#、Visual Basic.NET、J#等等, 以便开发人员可以选用自己熟悉的语言进行编程。ASP.NET是完全基于组件的, 所有的元素都视为对象。ASP.NET框架可以将应用程序的逻辑与表示代码清楚分开, 现在JSP是用Javabean来封装逻辑代码, 虽然可以反编译, 但毕竟技术向这个方向迈出了一步。Microsoft.net则用DLL封装逻辑代码, 使代码的安全性更高。在传统的ASP环境下, 可以通过POST和GET方法很容易地实现页面间值的传递, 因为在Web程序开发中, 值传递是不可避免的。同样的事情, 对于支持事件编程的ASP.NET环境中则是不一样的。本文就解决如何在ASP.NET页面间进行值传递的方法进行了阐述与总结。

1 页面间值传递的各种方法

本文中出现的程序段编码采用C#语言。设有两个页面:login.aspx (在页面上添加两个文本框Text Box, 分别命名为Log User, Log Pwd, 一个Button按钮) , show.aspx (在页面上添加一个标签, 以便显示login。aspx传递来的信息) 。

1.1 使用Query String集合传值

请求字符串是Web浏览器向Web服务器传送信息的一种方式, 在ASP.NET中, Request对象的Query String属性可以获取查询字符串的值。

Query String集合收集来自于URL请求地址中“?”后面的数据内容。这些数据称为URL附加信息。下面用代码来说明。

login.aspx的Button1的处理代码:

show.aspx的Page_Load的处理代码:

该方法的最大的优点就是简单, 但是这种方法也有很明显的缺点, 就是安全性很差, 数据通过URL会显示在地址栏里, 同时受到传递数据数量的限制, 并且不能传递Object类型的数据。

1.2 使用Session变量传值

用Session变量传递值也是在一种比较常用的方法, Session称为会话变量, 有效范围仅限于当前用户和服务器的会话时间段, 有效期时间长短可在代码中设置, 对于其他用户不可见。以下也用代码来说明。

login.aspx的Button1的处理代码:

由于每个服务器分配给Session变量空间会不同, 所以当我们不使用时就需要清空, 来节省系统资源, 降低无谓的消耗。

1.3 使用Application变量传值

Application变量是一个应用程序级的变量, 它是在服务器上建立的一个状态变量以用来存储信息, 该变量在应程序创建时会自动创建, 建立在内存中, 可供该应用程序中的任何一个页面访问, 属于一个全局变量。主要存储一些公共的信息, 使用该变量时还有两个方法:Lock和Un Lock, 可防止多个线程可以同时修改该变量中的值而引起的死锁和冲突现象。下面仍用上面的例子来说明。

login.aspx的Button1的处理代码:

1.4 使用Cookie变量传值

前面提到的Session变量的数据是保存在服务器的内存中的, 随着变量的增多, 肯定会增加服务器的负担。与Session变量和Application变量不同, Cookie变量是以文件的形式保存在客户端的硬盘上当前该客户的一些信息与操作, 该文件一般是安全的, 生命周期从定义开始到设置终止时间为止, 以下仍用上面的例子来说明如何使用Cookie变量来进行页面间值的传递。

login.aspx的Button1的处理代码:

在实际应用中, 也可强制将Cookie变量中的值清空。

1.5 使用静态变量传值

C在实际处理页面间数据传递的过程中, 数据信息除一些简单的值外, 还可能要传递各种对象 (ASP.NET中任何内容都将作为对象处理) , 有时可能会是Data Set对象, 在这种情况下, 上面提到的4种方法都不能实现。如果要处理这种对象, 就必须使用静态变量来解决。

从变量的作用域的角度分, 把变量分为全局变量和局部变量, 而从变量值存储的时间角度分, 变量又分为静态存储变量和动态存储变量。所谓静态存储变量就是指在程序运行期间分配固定的存储空间, 而动态存储变量就是在程序运行期间根据需要动态分配存储空间。需要注意的是:一般情况下, 全局变量是存放在静态存储区中的, 在程序运行时占有固定的存储空间。局部变量则是存放在动态存储区中的, 除非特别加“static”修饰。静态存储变量同样会占用服务器系统的资源, 这样我们在使用完后一般都要清空中楼以便释放相应的资源。下面仍用一个例子来说明该方法是如何进行页面间数据传递的, 实现从test1.aspx页面传递一个Data Set对象到test2.aspx页面。

test1.aspx的处理代码:

Test2.aspx的处理代码:

2 结束语

页面间进行信息传递是Web应用程序开发中不可缺少的一个环节。本文就如何在ASP.NET环境中实现在页面间进行信息传递的方法进行了简单阐述与分析。在实际的开发中, 我们可以根据需要、处理信息的不同情况, 结合5种方法的优缺点, 进行灵活应用, 尽量做到实现起来简单, 又能使程序性能得到优化。

参考文献

[1]李勇平, 陈峰波.ASP.NET (C#) 基础教程[M].北京:清华大学出版社, 2006.

[2]闫洪亮, 潘勇.ASP.NET程序设计教程[M].上海:上海交通大学出版社, 2006.

[3]苏贵洋, 何莉.ASP.NET网络编程从基础到实践[M].北京:电子工业出版社, 2006.

页面传值 篇2

新建页面

iOS的程序也是使用了MVC的思想,页面文件与代码文件是分离的,这点与Android的类似。在使用storyboard的方式中,新建页面只需要在storyboard中拖入一个View Controller则可,

接下来就可以在新建的页面中添加各种控件来编辑这个新建的页面。

在新建的页面上编排各种视图控件如同在Android中编辑那个布局的xml,但是要让程序代码与这个视图关联,需要做一些操作。首先必不可少是建立一个相关联的类,此时需要新建一个Objective-C的class,基类就选择对应的View Controller基类,这里就最简单的UIViewController,With XIB for user Interface那个复选框不能勾,点击完成便可成功建立一个View Controller。

回到stroyboard视图,选择刚刚新建的视图页面,点击下图的红框框住的部分

在下图红框处选择对应的View Controller,这样就把视图与程序代码文件View Controller关联上了

页面跳转

建立完新页面就可以进行页面间的跳转,最简单的跳转则是用类似建立控件Outlet或者绑定事件一样,按住Ctrl键然后拖动到要跳转到的页面上,然后在弹出的窗口选择modal

在运行程序后点击按钮就可以实现跳转。

另一种跳转的方式则是在起始页面按着Ctrl键然后拖动到目标页面中,弹出窗口的选项跟上面的一样,然后选中两个页面连线,在下图红框处给这个Segue命名

,最后在View Controller想触发跳转的地方(就比如点击按钮,则在按钮的点击事件的方法中)添加下面代码

[self performSegueWithIdentifier:@“segue的名” sender:nil];

则可实现跳转

跳转到新的页面后要返回上一个页面,则在需要返回的地方添加以下代码

[self dismissModalViewControllerAnimated:true];

参数true与false代表的是跳转的页面的切换时是否使用动画

页间传值

页面间值的传递最简单的方式是定义一个全局变量,无论是跳转还是返回,都可从该变量中get/set到值,如果不用这种方式,跳转时传值可以使用prepareForSegue sender 方法,返回时可以使用协议的方式,下面分别来看看,

使用prepareForSegue sender 方法来传递值,需要先在目标页面的View Controller的类声明处声明传递参数的属性,比如那个属性就叫value1吧,接着在起始页的地方实现方法

复制代码

-(void) prepareForSegue: (UIStoryBoardSegue *)segue sender: (id)

{

if([segue.identifier compare:@“mySegue”]==NO)

{

id page2=segue.destinationViewController;

[page2 setValue:self.lbUserName2.text forKey:@“value1”];

}

}

复制代码

起到传值作用是 setValue forKey的方法,segue的destinationViewController可以获取到当前Segue所跳到的目标页面的View Controller。这里有一个判断,用于判别这个跳转动作的segue是否是需要传值的那个segue,因为如果一个页面会有多个Segue跳转到不同的页面,不这样区分,在目标页面的View Controller中没有相应的参数时则会抛出异常。

采用协议的方式进行返回时传值,思想是这样的,定义相关的协议,协议是给起始页实现的,目的在于开放一些供赋值的方法给目标页面调用,目标页面在返回的时候就调用那些方法来把返回值传回给起始页面,目标页面如何获取起始页的实例呢,那就通过页面上面的setValue forKey方法来传值,下面给一个示例

定义协议

@protocol HGReturnView1Delegate

-(void) setReturnText:(NSString *) value;

@end

起始页面需要实现该协议,实现部分的代码就不贴出来了。目标页的声明处需要定义一个上面的协议属性

@property (weak,nonatomic) id delegate;

在页面跳转时传值时就调用以下代码

[self setValue:self forKey:@”delegate”];

在返回的时候需要用到delegate属性进行强制转换,转换后调用setReturnText方法

NSObject *tmpDele=self.delegate;

页面传值 篇3

1页面间传值技术

ASP.NET的Web页面间经常需要进行数据传值, 下面以实例研究不同的传值方法及特点。源页面Default1.aspx中两个Text Box中的用户名和邮箱的值通过单击“登录”按钮传递到目标页面Default2.aspx, 并在Default2.aspx中以两个Label标签显示从源页面接收到的值。两个页面的运行界面如图1和图2和所示:

1.1使用URL传值

使用URL传递参数是最常见的页面间传值方式,传递参数的URL格式如下:

http://Link Address?[参数名称]=[值]&[参数名称]=[值]&[参数名称]=[值]

URL传递参数的URL格式必须遵循下面规则:

1)URL由接收参数页面的URL地址和参数集合两部分组成,参数部分和接收参数页面的URL地址之间用“?”分隔,并且 “?”必须是英文里的问号。

2)参数和参数值之间以“=”连接,并且每个参数之间以 “&”分隔[2]。

实现页面跳转的方法可以使用超链接和Response对象的Redirect方法来实现。由于实例中的Default1.aspx页面属于动态页面,传递的参数值是变化的,所以在服务器端用Response对象的Redirect方法很容易实现。单击“确定”按钮对应的事件处理程序代码如下:

当执行URL传递参数后,接收参数的页面Default2.aspx可以使用Request对象的Query String属性来访问URL参数的值, 具体实现代码如下:

protected void Page_Load(object sender, EventArgs e){lb Name .Text =" 用户名:" + Request.Query String["name"];lb Email.Text = "邮箱:" + Request.Query String["email"];}

通过实例可以看到,使用URL传值很方便,但是该方法也有一些缺点:

1)传递参数的值只能是字符串,对数据类型有限制;

2)传递参数的值会在浏览器地址栏里被看到,这样安全性不高;

3)传递参数的值如果包含汉字时,会出现接收到的值丢失几个汉字或者出现乱码。为了确保传递的汉字可以被正确接收,可以在传值之前使用Server对象的Url Encode方法对所传递的汉字进行URL编码。接收值时,使用Server对象的Url De-code方法对所接收的汉字进行URL解码。

1.2Session对象传值

Session是用来存储当前用户的信息,当用户第一次访问Web应用程序时,服务器会自动为每个用户创建一个Sessio-n ID,用以标识当前用户的唯一身份[3]。然后根据Session ID可以获取到当前用户的Session对象,由于Session对象是私有的, 所以每个用户不可以访问其他用户的Session对象,Session对象的数据可以被同一用户在Web应用程序的一次会话过程共享,并且数据存储在服务器端,因此利用Session对象可以实现页面间传值,安全性也高,存储的数据类型没有限制。实例中Default1.aspx页面的后台代码如下:

由于Session对象具有超时时间限制,默认超时时间是20分钟,当Session对象超时后,Session对象保存的数据会被清空。因此在Default2.aspx页面首先判断Session对象中的name变量和email变量的值是否为空,具体实现代码如下:

Session对象可以存储任意类型的参数值,并且每个用户的Session对象是私用的,其存储在服务器端的数据不能被其他用户访问,安全性较高,但是当用户在未超时的情况下关闭浏览器后,Session对象仍在服务端存储,这样攻击者就可能访问服务器端的Session对象来获取用户的信息。因此,使用Session对象要注意用户关闭浏览器时,通过脚本语言Java Script通知服务器删除相应的Session对象。

1.3Application对象传值

Application对象用于共享应用程序级信息,多个用户共享一个Application对象。在第一个用户请求ASP.NET文件时,将启动应用程序并创建Application对象。一旦Application对象被创建,就可以共享和管理整个应用程序的信息[4]。在应用程序关闭之前,Application对象将一直存在。所以利用Application对象可以在不同用户之间共享数据。对于实例来说,如果创建两个Application对象变量用来存储用户名和邮箱信息,由于Application对象存储的数据可以被多个用户共享,这样当前用户的信息可以被其他用户获取到,所以Application对象在本实例中的使用是有局限性的。实例中Default1.aspx页面的后台代码如下:

Application对象中的数据存储在服务器端,并且被多个用户所共享,所以在改变Application对象变量值的时候,采用锁定方式,改变之后再进行解锁,供其他用户访问,对应的方法分别为Lock和Un Lock。在ASP.NET的Web应用程序中,使用Ap-plication对象可以统计在线人数。

1.4Cookie对象传值

Cookie对象提供了一种存储用户特定信息的方法,当用户访问Web应用程序时,使用Cookie对象存储用户首选项或其他信息。当该用户再次访问时,应用程序便可以检索以前存储的信息。Cookie对象在客户端存储基于文本形式的用户数据,这样不同的用户只要不在同一台计算机上访问同一Web应用程序,就获取不到Cookie对象存储的用户数据。由于Request和Response对象都提供了一个Cookies集合,利用Response对象向客户端存储Cookies的信息,使用Request对象从客户端读取Cookies的信息。实例中Default1.aspx页面的后台代码如下:

Default2.aspx页面的后台代码如下:

使用Cookie对象实现页面间传值具有简单、持久和不需要任何服务器资源等优点,用户可以通过它对登录的客户进行标识,防止用户恶意攻击网站。例如:在线投票时,可以使用Cookie防止用户进行重复投票。但是存储在客户端安全性差, 并且每个Cookie对象都有过期时间,或者浏览器禁止Cookie, 这都会导致需要Cookie的Web应用程序出现问题,同时每个Cookie存储数据的大小都有限制。

2结束语

总之,除了本文探讨的上述传值方式,在ASP.NET中还可以使用Cache和Context对象实现页面间传值。无论何种传值方式,都有其优缺点。在实际应用中应具体问题具体分析,从数据的安全性、数据类型和占用服务器资源等方面来考虑,选择合适的传值方式,才能灵活运用这些传值方式,更好的解决实际问题[5]。

摘要:页面间传值是Web应用程序开发经常用到的功能,由于ASP.NET封装了一些内置对象,因此实现页面间传值的方式有多种。该文分析了URL、Session对象、Application对象和Cookie对象等传值技术,通过实例给出这些传值方式的基本应用,并讨论和比较它们的优缺点及应用范围。

页面传值 篇4

关键词:ASP.NET,页面传值,Query String,Application,Session,Cookie,Server.Transfer

1 背景

《ASP.NET程序设计》课程是我校信息管理与信息系统专业的一门专业课,也是一门实践型课程。其教学目的是培养学生掌握动态网站的设计、开发和编程能力,熟悉动态网站的开发流程,能自主开发一个简单的动态网站,并进行维护。这门课涉及的内容丰富、知识点多,且知识的关联性、实践性和综合性较强。要求授课教师不仅仅对课程内容和教材熟悉,还要求有一定的软件开发和设计的经验,通过项目驱动来覆盖知识点,并进行拓展,确保知识的完整性。

例如,动态网站架构时,如何实现浏览器和Web服务器之间的数据交互是非常重要的,其中选择合适的方法实现页面之间一个或多个参数的传递尤为关键。当然,ASP.NET为页面之间的数据传递提供了多种不同的途径,我们可以使用Query S⁃tring、Application、Session、Cookie和Server.Transfer等变量及其方法来实现,但是我们应该什么时候使用哪种方法呢?本文针对这个问题进行了探讨,并对其进行比较分析。

2 问题描述

首先我们将问题定义为:有两个web页面a.aspx和b.aspx,在a.aspx中有一个textbox1和button1,在b.aspx中有一个la⁃bel1。运行时,用户在页面a.aspx中的textbox1输入信息后,如何实现单击button1弹出b.aspx,并将textbox1中的值传递到la⁃bel1中呢?

解决这个问题,需要考虑下面三个方面:

1)哪些用户需要数据?

2)数据集的类型和大小?3)

数据需要保持多长时间?

通过分析实际问题的需求,我们就可以决定应该使用哪种方法为ASP.NET应用程序之间请求数据提供最佳的解决方案。

3 解决方法及适用情况

下面我们基于C#来阐述解决上述问题的各种方法,及其生命周期和应用范围。

3.1 使用Query String

Query String集合检索HTTP查询字符串中变量的值,HTTP查询字符串由问号(?)后的值指定。

语法:Request.Query String(variable)[(index)|.Count]

实现上述的问题的关键代码如下:

Query String是一种最简单最常用的传值方式,但被传送的值会显示URL中,对于用户来说是可见的,因此使用这种方法时,需要对敏感数据变量进行加密。其次,Query String中保存的数据是由单独的用户使用,其大小一般1KB。其生命周期可能只有一个请求那么短,也可能有用户使用应用程序的时间那么长。因此,如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。

3.2 使用Application对象

Application可定义、声明、设计“系统”层的变量、对象、事件处理过程,允许同一Web应用程序的所有用户共享其中的信息。默认情况下,一个虚拟目录下的所有ASP.NET文件便构成了一个Web应用程序。最常见的应用就是网络群聊,必须通过Application对象让所有成员共享聊天信息及成员列表。

实现上述的问题的关键代码如下:

由于Application对象是多用户共享的,在一个时间只有1个用户使用,需对Application对象进行锁定(Lock),操作完成之后再解锁(Un Lock)。

3.3 使用Session对象

Session传值也是常见的方式之一,与Application对象颇为类似,但Session对象是来定义、声明、设计“用户”层的变量、对象及事件处理过程,即Session对象的信息只适用于同一位用户,其生存期是用户持续请求的时间再加上一段时间,一般是20分钟。当用户在不同页面跳转时,存储在Session对象中的用户会话的信息不会被清除,还可以交叉传递到多个页面,直至把Session变量的值Removed后才会消失。例如购物车、购物袋等,每一个人的预购列表会存储在各自的Session变量中,不和他人共享。

实现上述的问题的关键代码如下:

使用Sessions效率很低,因为即使用户停止使用应用程序后它仍然保持在内存中一段时间,这对于非常繁忙的站点的可伸缩性有严重的影响。

对于小的数据量,使用Sessions保存只需要在用户当前会中的特定数据,是很好的方法。但是使用Sessions效率很低,因为当用户停止使用应用程序后,它仍然在内存中保留一段时间,这会影响站点的响应效率。

3.4 使用Cookie对象

Cookie提供了一条灵活的、强大的维护用户会话信息的途径,伴随着用户请求和页面在Web服务器和浏览器之间传递。其生命周期可与浏览器窗体一样短,也可长达数月、数年。

实现上述的问题的关键代码如下:

这个也是一种常用的方法,与Session一样,是针对用户而言的,但是有个本质的区别:Cookie是存放在客户端的,而ses⁃sion是存放在服务器端的。

由于cookie对象不是所有浏览器都支持的,而且cookie作为简单的明文文本保存在用户的计算机中,可以被用户禁止或删除,因此我们不能使用cookie保存敏感的、未加密的数据,同时还要考虑cookie被删除的情况。

3.5 使用Server.Transfer方法

使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面向对象的,简洁有效。注意Server.Transfer只适合于服务器端重定向的页面。

实现上述的问题的关键代码如下:

4 结束语

本文主要从不同方法的应用范围、数据类型和大小、生命周期等四个指标对常用的5种传值方法进行了讨论、分析,见表1。

由此可见,每一种传值方法都有其适用范围和条件,都有不同的生命周期,所能处理数据的类型和大小也有所不同。因此,在实际的教学或开发应用中,我们应该对需求进行仔细、全面的分析,考虑数据的类型、保密性,使用范围和保持的时间,比较不同方法的应用效果,权衡利弊,选择合适的方法。

参考文献

[1]郭兴峰,陈建伟.ASP.NET动态网站开发基础教程(C#篇)[M].北京:清华大学出版社,2006.

上一篇:乳酸动态监测指标下一篇:土地开发管理