看到网上面试题。很多答案都是误人子弟。
ASP.NET跨页传递值的问题,其实是一个状态管理的问题。原因就是因为HTTP是无状态连接的协议。因此在WEB开发中跨页传递与WINDOWS有本质的区别。
首先我们要确定,页面之间传递值是只在同一客户端中不同的页面传递。我们假设有页面A,B,A要传递一个值X给B.
关键问题是X保存在哪里的问题。分析一下无非保存在四个地方:
1.服务器的内存中
2.服务器的硬盘中。
3.客户端的内存中。
4.客户端的硬盘中。
第一种:服务器的内存中。ASP.NET本身提供了很多种方法
1.读取Session对象。
2.读取Application对象。
3.用?***,取QueryString对象。
4.读取Cache对象。
5.使用Transfer,然后在B页面中使用this.Context.Handler或PreviousPage获取A页面的内容。
6.A页面中的按钮的PostBackUrl属性指定为B页面,则B页面可以通过PreviousPage对象的findcontrol方法获取页面控件中的值。使用@PreviousPageType指令。在B页面中指定A页面为前一个页面。则可以通过直接引用PreviousPage.controlname
7.A页面的Form中的Action属性指定为B页面,则B页面可以通过Form对象获取页面控件的值。
除此以外,只要保证A页面能够写入,B页面能够读取(根据X的唯一名称)的方法都是可行的。绝对不局限于以上的方法。比如我另外运行一个WebService,实现一个字典。A写入X,B调用X.都是可以的。甚至该服务器跟IIS运行的服务器不是同一台机器都没有关系。
第二种:服务器的硬盘中。比如A把X写入数据库,或者文本文件。然后B再读取出来。
ASP.NET2.0中的会话状态管理本身支持两种持久化会话状态:stateServer和sql server模式。
第三种:客户端的内存中。目前浏览器客户端脚本语言还不允许直接对内存进行操作。可以开发一个插件,使用插件读取客户端内存。
第四种:客户端的硬盘中。最常用的是使用cookie。当然如果有文件读写权限的话。也可以写到客户端文件中或数据库中。