ASP_NET中页面之间值的传递方法的研究

  • 格式:pdf
  • 大小:99.10 KB
  • 文档页数:2

收稿日期:2004206206;修返日期:2004207222基金项目:国家“863/C I M S ”基金资助项目(2002AA414050)ASP.N ET 中页面之间值的传递方法的研究3屈喜龙(西南交通大学CAD 工程中心,四川成都610031)摘 要:在W eb 开发过程中,W eb 页面之间的值传递是重要的,也是必要的。

在分析了ASP .NET 的优点和特点的基础上,对其环境下的值传递的各种方法进行了详细的分析和对比,并给出了相应的源代码。

关键词:ASP .NET;面向对象;值传递中图法分类号:TP311 文献标识码:A 文章编号:100123695(2005)0620192202Research of Methods of Value Transferring bet w een Pages in ASP .NETQU Xi 2l ong(CAD Engineering Center ,Southw est J iaotong U niversity,Chengdu S ichuan 610031,China )Abstract:I n the p r ocess ofW eb devel opment,it is necessary and i m portant t o transfer the values bet w een W eb pages .Based on the analysis of the advantages and traits of ASP .NET,all of the methods of values 2transferring bet w een W eb pages in ASP .NET p latfor m are discussed and compared in detail,and the s ource codes are p resented .Key words:ASP .NET;Object 2O riented;Values 2Transferring1 引言ASP .NET 是ASP (Active Server Pages )的后继版本,ASP .NET 和它的前期版本都是构建新一代动态网站和基于网络(特别是I nternet )的分布式应用的技术,ASP .NET 为网站设计人员和网络程序员提供了更简单快捷的开发方法。

而且,ASP .NET 支持多种编程语言,如C#,JScri p t .NET,V isual Basic .NET 等,甚至可以使用第三方语言,如Perl 和C OBOL 等,Java (称为J #)的执行代码也可以从M icr os oft 上下载到。

ASP .NET 是完全基于组件的,所有的页面、C OM 对象乃至HT ML 元素都可以视为对象。

在ASP .NET 中可以使用.NET Platfor m 提供的各种运行环境服务,如丰富的类库、数据访问、自动内存管理等。

ASP .NET 还提供了卓越的事件驱动编程模型,从而可以让开发者简化应用程序的总体设计,大大提高了开发效率[2]。

但是,这也造成了它固有的一些问题。

例如,使用传统的ASP 环境下,可以通过使用P OST 或GET 方法很容易地实现页面间值的传递,而页面之间值的传递在一个系统的开发过程中是不可避免的。

同样的事情,在使用事件驱动编程模型的ASP .NET 就不是那么容易了[1,2]。

2 各种方法的详细分析与研究下面将结合笔者在开发成、德、绵网络化制造系统的实践和经验,就ASP .NET 中页面之间值的传递方法进行详细的分析和研究。

设第一个页面为First .as px,第二个页面为Second .as px,需要把First .as px 上的信息传到Second .as px 中。

2.1 使用Se ss i o n 变量使用Sessi on 变量[3]是可以在页面间传递值的一种最普遍的方式,本例中把控件中的值存在Sessi on 变量中,然后在另一个页面中使用它,以实现不同页面间值传递的目的。

但需要注意的是,在Sessi on 变量存储过多的数据会消耗比较多的服务器资源,在使用Sessi on 时应慎重,当然还应该使用一些清理动作来去除一些不需要的Sessi on 来降低资源的无谓消耗。

下面的代码说明如何使用Sessi on 变量在页面间进行值传递。

First .as px 的隐含代码(Behind Code ):p rivate void btn_Click (object sender,Syste m.Event A rgs e ){//由其页面上的一个Butt on 的Click 事件来激发Sessi on["na me"]=Text B ox1.Text;Sessi on["pass word"]=Text B ox2.Text;Server .Transfer ("Second .as px");}Second .as px 的隐含代码(Behind Code ):p rivate void Page_Load (object sender,Syste m.Event A rgs e ){string na me,pass word;na me =Sessi on["na me"].T oString ();pass word =Sessi on["pass word"].T oString ();Sessi on .Remove ("name");//必要的一步,清空Sessi on 变量以免它占用宝贵的系统资源Sessi on .Remove ("pass word");}2.2 使用App li ca ti o n 变量App licati on 变量与Sessi on 变量类似。

App licati on 的原理是在服务器端建立一个状态变量来存储所需的信息,这个状态变量是建立在内存中的,还有这个状态变量是可以被网站的所有页面访问的。

这就意味着它只能存储一些要公布的信息,而不能存储一些比较个人的信息。

另外,App licati on 变量还有两个方法:Lock 和Unl ock 方法,用于处理多个用户对存储在Ap 2p licati on 中的数据进行写入的问题。

Lock 方法阻止其他客户修改存储在App licati on 对象中的变量,以确保在同一时刻仅有一个客户可修改和存储App licati on 变量。

下面的代码说明如何使用App licati on 变量在页面间进行值传递。

First .as px 的隐含代码(Behind Code ):・291・计算机应用研究2005年p rivate void btn_Click(object sender,System.Event A rgs e){//由其页面上的一个Butt on的Click事件来激发App licati on["na me"]=Text B ox1.Text;App licati on["pass word"]=Text B ox2.Text;Server.Transfer("Second.as px");}Second.as px的隐含代码(Behind Code):p rivate void Page_Load(object sender,System.Event A rgs e){string name,pass word;App licati on.Lock(); //只容许一个客户进行修改name=App licati on["na me"].ToString();pass word=App licati on["pass word"].ToString();App licati on.Unl ock();//解锁,从而容许别的客户修改App licati on变量}2.3 使用Coo ki e变量Sessi on变量的数据是存于服务器端的内存中,其内容终止于设定的时间或用户的离线。

这样,当变量增多,务必造成服务器端的负担。

与Sessi on变量和App licati on变量不同, Cookie变量的数据是以文件的形式存放于客户端的磁盘上,可以一直存在或终止于所设定的时间。

下面的代码说明如何使用Cookie变量在页面间进行值的传递。

First.as px的隐含代码(Behind Code):p rivate void btn_Click(object sender,System.Event A rgs e){//由其页面上的一个Butt on的Click事件来激发H tt pCookie cookie1=new H tt pCookie("na me");H tt pCookie cookie2=new H tt pCookie("pass word");cookie1.value=Text B ox1.Text;cookie2.value=Text B ox2.Text;Res ponse.AppendCookie("cookie1");Res ponse.AppendCookie("cookie2");Server.Transfer("Second.as px");}Second.as px的隐含代码(Behind Code):p rivate void Page_Load(object sender,System.Event A rgs e){string name,pass word;name=Request.Cookies["na me"].Value.ToString();pass word=Request.Cookies["pass word"].Value.ToString();}根据情况的需要,可以强制将Cookie变量的内容全部清空。

虽然对Cookie变量的存储可以对客户端的文件进行操作,但是这种操作是安全的,因为Cookie调用的文件和目录都进行了限制,它不可以越权操作客户端的其他文件。

2.4 使用Se rve r.Tra n sfe r使用Server.Transfer[3]相比上面介绍的方法稍微复杂一点,但在页面间的值传递中却是特别有用的。