SV_Page = (SendValues)Context.Handler;
//SV_Page即为SendValues.aspx页面类的对象,直接获取其TransferData属性值
string str = SV_Page.TransferData;
可见,这种方法对于有面向对象基础的编程者而言非常容易理解。不过页面间如果需要传递数量比较多的值,这种方法需要定义过多的属性,略显繁杂。编程者还可以直接使用HttpContext对象的“Iterms”属性添加多项名称/值对的数据,在SendValues.aspx.cs调用HttpServerUtility对象的Transfer方法的某个方法中,修改代码如下所示。
Context.Items["value1"] = "on
Context.Items["value2"] = "two";
在GetValues.aspx.cs的Page_Load方法中接收前1个页面所传递的值,修改代码如以下代码所示。
string str = "值1:" + Context.Items["value1"].ToString();
str += "值2:" + Context.Items["value2"].ToString();
5.Application传值
严格地说应该是通过HttpApplication对象在服务器端生成一个状态变量来存储所需的信息,该HttpApplication对象变量的可用范围覆盖整个WEB应用程序。所以该对象一般存储一些要公布的信息,如在线人数等,而对于那些涉及用户个人的敏感数据则不用这种方法存储。HttpApplication对象有两个常用的方法,即Lock和UnLock方法,可用于处理多个用户对存储在Application变量中的数据进行写入的问题。Lock方法锁定全部的Application变量,从而阻止其他用户修改Application对象的变量值,UnLock方法则解除对HttpApplication对象变量的锁定。通过HttpApplication对象传值的方法和Session比较相似,在页面类的某个方法中编写代码如下所示。
Application["a"] = "微软公司";
Application["b"] = "苹果公司";
Application["c"] = “Mac”;
以上代码很轻松地将三个字符串值保存在HttpApplication对象的变量中了,并且这些变量是整个程序共享的,其他用户通过相应的页面同样可以获取。获取这些变量的方法如以下代码所示。
Application.Lock();
string str = "值1:" + Application["a"];
str += "值2:" + Application["b"];
str += "值3:" + Application["c"];
Application.UnLock();
注意:虽然使用方式和Session相似,但是Session是对于每个单独的用户,当该用户关闭浏览器,则Session失效。HttpApplication对象存储的变量是针对所有访问程序的用户,即使有用户关闭了浏览器,变量的值不会丢失。
6.跨页面传送
跨页面传送和调用HttpServerUtility对象的Transfer方法有相似之处,不过效率更高。因为调用HttpServerUtility对象的Transfer方法是基于服务器的方法,而跨页面传送是基于浏览器端的。这个方法主要是设置控件的“PostBackUrl”属性,使该控件(如Button)操作后转向指定页面,并且这个指定页面可以直接获取前一个页面的所有控件对象及其属性值。假设第一个页面为SendValues.aspx,在该页面中(非*.cs代码文件)添加两个控件,设置如以下代码所示。








