邵珠贵 杨惠英
(吉林电大分校,吉林市 132002;东北电力大学,吉林市 132002)
关于ASP.NET网页间数据共享的研究
邵珠贵 杨惠英
(吉林电大分校,吉林市 132002;东北电力大学,吉林市 132002)
利用ASP.NET C#开发基于B/S模式的应用系统,通常是由多个页面构成的整体。页面之间必然存在数据的传递,即存在数据的共享问题。解决好页面之间的数据共享是开发高质量应用系统的重要前提,若解决不好会给系统的安全运行带来隐患。本文参考相关资料结合开发实践对ASP.NET网页的数据共享问题进行了较为详细的总结和探讨。
asp.net;数据共享;编程
利用ASP.N ET C#开发基于B/S模式的应用系统,往往是由许多页面构成的一个复杂整体。这些页面共同协调实现用户所需要的功能,页面之间必然存在内在联系,存在数据的传递,即存在数据的共享问题。即使在同一页面中,内部各函数之间也需要数据共享。解决好页面的数据共享是开发高质量应用系统的重要前提,否则会使系统的数据紊乱,导致系统复杂度提高,使开发工作事倍功半,给系统的安全运行带来隐患。
在利用ASP.N ET开发的系统中,每个页面对应一个程序文件,而每个程序文件是由多个函数组成的,在函数之间需要数据共享;另外 HTTP协议是一种无状态的通信协议,每个连接都是全新的开始。在页面状态发生变化时即对一个页面进行刷新时,刷新前后的页面也需要数据共享。
一般情况实现某一个功能是需要多个网页联合共同完成的,当客户端用户在同一个浏览器窗口先后进入这些页面 (不是中途打开直接进入),有时前面的页面会向它转向打开的后面页面传送数据,即这些页面也是存在数据共享的问题。例如前一个网页的输入数据或处理结果被后一个网页所使用。
当用户在同一台机器上先后打开多个浏览器窗口,浏览同一个网站的相同或不同的网页时,本用户的数据有时需要在不同时间重复使用,即存在同一用户机器不同窗口间的数据共享的问题。例如在个人专用机器上用户的一些登录信息可以重复使用的,不必每次都重新输入这些登录信息。
当有不同用户同时或不同时在不同机器上浏览相同或不同的网页时,用户之间有时也会有数据的联系,例如统计页面的访问次数或记录网站的在线人数时就需要统计访问本网页 (网站)的所有访问用户。这些用户可能是同时或不同时在不同机器上浏览的。
*利用类的实例
可以在系统文件夹App-Code中设计自定义类,在页面类的变量声明处可以创建这个类的实例,而这个类的实例就类似页面的全局变量,在页面中的每个函数都可以使用。
*利用服务器控件
服务器控件在页面运行过程中具有保存数据的功能,例如 TextBox控件在页面被提交 (Post-Back)前后,它的 Text的属性值不会发生改变的,因此可以利用服务器控件实现在页面不同状态下的数据共享。
*利用View State对象
View State对象可以用来保存页面中的各种变量,甚至是对象。
“有些数据可以直接保存到View State中,诸如字符串、整数、布尔、数组表、哈希表等。”服务器端会为每个连接到该页面的用户分别建立一个V iew State,相当于页面级全局变量,但是一旦退出当前页面,它就会丢失。使用格式是:保存数据View State[“数据名称”]=数据;读取数据变量=(int)View State[“数据名称”]。
*利用Response与request进行参数传递
Response与 request是asp.net提供的两个常用内置对象。Response对象主要功能是向浏览器输出信息。该对象使用redirect方法可以重定向到其他页面,并且可以使用连接地址携带参数。其格式是:Response(“URL地址 ?参数列表”)。Request对象是与 Response对象相对应的对象。利用 Request对象可以读取 Response对象在其他网页提交过来的数据。其使用格式是:Request[“参数名”]。因此利用Response与 request的参数传递可以实现网页间的数据共享。
*利用Session对象
Session对象也是asp.net提供的一个常用内置对象。该对象可以实现同一用户多个网页间数据的共享,Session对象是面向浏览器窗口的 (即是用户级的),每个浏览器窗口都有自己独立的Session互不干扰。当用户在应用程序的Web页之间跳转时,存储在 Session对象中的变量不会丢失,而是在整个用户会话中一直存在下去,直到用户离开这个网站为止。因此可以利用Session对象实现同一用户网页间的数据共享。Session对象的使用格式:读取数据变量=Session[索引号|“数据名称”];保存数据 Session[索引号 |“数据名称”] =数据。
*利用Cookies对象
Cookies对象是可以用来进行数据共享的另外一种对象。Cookies对象是依附于 Response与 request对象的子对象,不能单独使用。Cookiess是与Web站点关联而不是与具体网页关联的,无论用户浏览站点中哪个页面,浏览器和服务器都交换网站的Cookies信息。Cookies的数据是以文本形式存在客户端的机器中,因此Cookies对象是面向机器的,可以使同在该机器上分别打开的不同浏览器窗口共享数据。Cookies对象使用格式:保存数据Response.Cookies[“数据名称”].value=数据;读出数据 data=Request.Cookies[“数据名称”]. value。
*利用App lication对象
App lication是一个面向应用程序级的对象,用于保存所有用户共用的数据信息,这些信息对所有用户是共享的。因此,可以利用App lication对象实现应用程序的所有用户之间共享数据。App lication对象的使用格式:读取数据数据=App lication [索引号|“数据名称”];保存数据App lication[索引号|“数据名称”]=数据。
*利用文件或数据库实现
以上大多数的共享方法当IIS或者机器关闭之后,存放在对象中的数据也随之消失,如果想要在IIS或者机器关闭之后数据仍然能够长期保存共享,就必须将共享数据存到文件或数据库里,需要时再从文件或数据库中取出。Stream Reader对象是.N ET提供的专门用于读取文件的对象; StreamW riter是写入文件的专用对象。两个对象都有相应的方法用来完成文件的读出和写入。数据库可以是一些常用的后台数据库,ASP.N ET提供了专门的操作数据库的对象及方法,利用这些对象及方法可以完成对数据库的具体操作。
综上所述,利用ASP.NET C#开发基于B/S模式的应用系统时,网页间数据共享的情况比较多,解决的方法也不尽相同。在实际编程时需要根据实际情况采取综合的解决方案。
[1]徐新华.精通ASP.Net 2.0[M].北京:机械工业出版社,2006:101.
[2]刘培义.ASP.Net程序设计教程 [M].北京:科海电子出版社,2009:75.
[3]宫继兵.ASP.Net 2.0 Web数据库开发教程[M].北京:机械工业出版社,2009,94.
TP393
A
1008-7508(2012)01-0134-03
2011-09-26
邵珠贵 (1955~),吉林市人,吉林电大分校副教授,主要从事计算机应用的教学和信息管理软件的开发。杨惠英 (1958~),女,吉林市人,东北电力大学副教授.主要从事计算机应用的教学和信息管理软件的开发。