【发布时间】:2009-11-25 15:19:08
【问题描述】:
我遇到的问题如下:
我目前有一个自定义类,可以生成按钮并将它们放在母版页上的占位符上。
这些按钮的事件将特定值放入与数据库查询不同的值的会话中。本质上,这些按钮充当图表的过滤器。
创建所有按钮后,我意识到会话值将在页面之间保持不变,因此每次用户在打开另一个页面时进入不同的页面,在打开页面上选择的过滤器将保持不变已打开。
起初,我想使用视图状态而不是会话,但后来意识到母版页和内容页不共享相同的视图状态。
目前,我正在考虑为 sesson 键使用前缀,以识别过滤器实际存在于哪个页面。但是,如果用户希望同时打开多个页面,我不想让会话过载。
任何需要在 app_code、主页面和内容页面之间共享视图状态(或其他存储值的方式)的解决方案?
【问题讨论】:
-
那么,您的意思是,当您重定向到新页面时,您希望过滤器具有默认值而不是前一页的值?
-
我是这个项目的另一位开发人员。部分问题是我们用来显示各种图表的系统有四个屏幕。每个屏幕(带有一个浏览器实例)都需要能够跟踪它过滤的内容与其他屏幕不同。因此我们最初使用了视图状态。 Session 只是一个实例,因此当您更新一个浏览器时,它会使用来自任何其他实例的最新更改的所有过滤器。
-
过滤值有多长,有多少?你考虑过 URL 查询吗?
-
过滤器值本身不会太长。但是,可能有大约 10 种不同类型的过滤器,这些过滤器在页面中并不固定。页面上显示的过滤器数量是通过母版页中的属性设置的。 URL 解决方案确实有一些吸引人的方面,主要是用户可以为预设过滤器选择添加书签。然而,主要缺点是用户将能够看到过滤器的不同参数(数据库攻击),以及查询中存在的十个不同过滤器的可能长度。
-
Josh,您如何将过滤器参数添加到查询字符串中?有没有办法在不手动重定向页面的情况下做到这一点?
标签: asp.net vb.net session master-pages viewstate