首页 > 代码库 > 页面状态保持机制(编辑中)

页面状态保持机制(编辑中)

在ASPX页面中,每个控件的状态,通过VIEWSTATE进行保持,但前提是必须以回调的方式进行调用。我们的很多页面处理,都是以URL调用的方式进行的,无法使用VIEWSTATE。

在上例的分页处理中,使用了URL参数来传递状态,这种传递方式简单明了,但也存在问题:

1、复杂

2、和其他方式之间的共处存在问题

特别是第二点,在分页中体现得非常明显:既要能通过URL传递,还要允许页面控制,还要能传递新的参数。要实现这一要求,只能借助复杂的处理逻辑来实现了:

 

这种方式,当页面还有其他参数的时候,就会很难控制,因为必须要想办法把页面现有的所有参数都传递给其他的分页。因此,在构造分页器的时候,必须手工把其他所有参数解析出来,再传递给分页器。这种模式既复杂,又容易出错。

基于页面的参数保持机制

参数传递的种种不便之处,使人不禁想到,为何非要使用URL呢?还有更加简洁诶的方案,如Session或者Cookie。很多参数,如条件、传入初始参数等,在页面以及跳转中,基本都不会发生变化,用Session或者Cookie来保存,正好符合这两种方式的特点。

那么,究竟选择cookie还是session呢?session是一个应用级别的状态保存机制,也就是说,在整个浏览过程中,session都会有效。但session也存在不足:

1、session存放在服务器端,占用服务器的资源

2、多个页面公用session,容易导致混乱,如果每个页面都分别保存,则有造成资源的浪费

3、Session本身有失效周期,在一些长期工作的页面,带来问题

而cookie相对来说,正好没有session的不足。首先,cookie不占用服务器资源,其次,cookie按键-值的方式存储,正好可以用每个页面的名称为key,为每个页面创建状态。

页面状态保存机制的设计目的

根据各种应用的需要,状态机制应该达到如下的要求:

1、对于URL的参数,自动读入并以cookie的方式保存。以后每次可以直接读入。

2、对于参数,可以修改,自动存入cookie。

3、对于session参数,也同样处理。

这种机制也是解决session过期的有效方法。

页面状态保存机制的实现