《ASP.NET程序设计》课程中页面间传值方法的探讨
2017-03-21李莉森干
李莉+森干
摘要:该文针对《ASP.NET程序设计》课程,介绍了动态网页间传值的不同方法,从生命周期、应用范围、数据集的大小和类型讨论了这些方法的异同和优缺点,以期能够让学生掌握这些方法及其特点,在实际应用中能够结合具体问题选择有效的方法。
关键词:ASP.NET;页面传值;QueryString;Application;Session;Cookie;Server.Transfer
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)33-0136-02
1 背景
《ASP.NET程序设计》课程是我校信息管理与信息系统专业的一门专业课,也是一门实践型课程。其教学目的是培养学生掌握动态网站的设计、开发和编程能力,熟悉动态网站的开发流程,能自主开发一个简单的动态网站,并进行维护。这门课涉及的内容丰富、知识点多,且知识的关联性、实践性和综合性较强。要求授课教师不仅仅对课程内容和教材熟悉,还要求有一定的软件开发和设计的经验,通过项目驱动来覆盖知识点,并进行拓展,确保知识的完整性。
例如,动态网站架构时,如何实现浏览器和Web服务器之间的数据交互是非常重要的,其中选择合适的方法实现页面之间一个或多个参数的传递尤为关键。当然,ASP.NET为页面之间的数据传递提供了多种不同的途径,我们可以使用QueryString、Application、Session、Cookie和Server.Transfer等变量及其方法来实现,但是我们应该什么时候使用哪种方法呢?本文针对这个问题进行了探讨,并对其进行比较分析。
2 问题描述
首先我们将问题定义为:有两个web页面a.aspx和b.aspx,在a.aspx中有一个textbox1和button1,在b.aspx中有一个label1。运行时,用户在页面a.aspx中的textbox1输入信息后,如何实现单击button1弹出b.aspx,并将textbox1中的值传递到label1中呢?
解决这个问题,需要考虑下面三个方面:
1)哪些用戶需要数据?
2)数据集的类型和大小?
3)数据需要保持多长时间?
通过分析实际问题的需求,我们就可以决定应该使用哪种方法为ASP.NET应用程序之间请求数据提供最佳的解决方案。
3 解决方法及适用情况
下面我们基于C#来阐述解决上述问题的各种方法,及其生命周期和应用范围。
3.1 使用QueryString
QueryString集合检索HTTP查询字符串中变量的值,HTTP查询字符串由问号(?)后的值指定。
QueryString是一种最简单最常用的传值方式,但被传送的值会显示URL中,对于用户来说是可见的,因此使用这种方法时,需要对敏感数据变量进行加密。其次,QueryString中保存的数据是由单独的用户使用,其大小一般1KB。其生命周期可能只有一个请求那么短,也可能有用户使用应用程序的时间那么长。因此,如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。
3.2 使用Application对象
Application可定义、声明、设计“系统”层的变量、对象、事件处理过程,允许同一Web应用程序的所有用户共享其中的信息。默认情况下,一个虚拟目录下的所有ASP.NET文件便构成了一个Web应用程序。最常见的应用就是网络群聊,必须通过Application对象让所有成员共享聊天信息及成员列表。
由于Application对象是多用户共享的,在一个时间只有1个用户使用,需对Application对象进行锁定(Lock),操作完成之后再解锁(UnLock)。
3.3 使用Session对象
Session传值也是常见的方式之一,与Application对象颇为类似,但Session对象是来定义、声明、设计“用户”层的变量、对象及事件处理过程,即Session对象的信息只适用于同一位用户,其生存期是用户持续请求的时间再加上一段时间,一般是20分钟。当用户在不同页面跳转时,存储在Session对象中的用户会话的信息不会被清除,还可以交叉传递到多个页面,直至把Session变量的值Removed后才会消失。例如购物车、购物袋等,每一个人的预购列表会存储在各自的Session变量中,不和他人共享。
使用Sessions效率很低,因为即使用户停止使用应用程序后它仍然保持在内存中一段时间,这对于非常繁忙的站点的可伸缩性有严重的影响。
对于小的数据量,使用Sessions保存只需要在用户当前会中的特定数据,是很好的方法。但是使用Sessions效率很低,因为当用户停止使用应用程序后,它仍然在内存中保留一段时间,这会影响站点的响应效率。
3.4 使用Cookie对象
Cookie提供了一条灵活的、强大的维护用户会话信息的途径,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。其生命周期可与浏览器窗体一样短,也可长达数月、数年。
这个也是一种常用的方法,与Session一样,是针对用户而言的,但是有个本质的区别:Cookie是存放在客户端的,而session是存放在服务器端的。
由于cookie对象不是所有浏览器都支持的,而且cookie作为简单的明文文本保存在用户的计算机中,可以被用户禁止或删除,因此我们不能使用cookie保存敏感的、未加密的数据,同时还要考虑cookie被删除的情况。
3.5 使用Server.Transfer方法
使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面向对象的,简洁有效。注意Server.Transfer只适合于服务器端重定向的页面。
4 结束语
本文主要从不同方法的应用范围、数据类型和大小、生命周期等四个指标对常用的5种传值方法进行了讨论、分析,见表1。
由此可见,每一种传值方法都有其适用范围和条件,都有不同的生命周期,所能处理数据的类型和大小也有所不同。因此,在实际的教学或开发应用中,我们应该对需求进行仔细、全面的分析,考虑数据的类型、保密性,使用范围和保持的时间,比较不同方法的应用效果,权衡利弊,选择合适的方法。
参考文献:
[1] 郭兴峰, 陈建伟. ASP.NET动态网站开发基础教程(C#篇)[M]. 北京: 清华大学出版社, 2006.
[2] 杨学全. Visual C#.NET Web应用程序设计[M]. 北京: 电子工业出版社, 2007.