像viewstate和session这样的东西

时间:2009-11-25 15:19:08

标签: asp.net vb.net session master-pages viewstate

我遇到的问题如下:

我目前有一个自定义类,可以生成按钮并将它们放在母版页上的占位符中。

这些按钮的事件将特定值放入会话中,该会话不同于数据库查询的值。从本质上讲,这些按钮可用作图表的过滤器。

创建完所有按钮后,我意识到会话值将在页面之间保持不变,因此每次用户进入另一个页面而另一个页面打开时,在打开页面上选择的过滤器将保持不变为新页面打开了。

首先,我想使用viewstate而不是session,但后来意识到母版页和内容页不共享同一个viewstate。

目前,我正在考虑使用sesson密钥的前缀来识别过滤器实际存在的页面。但是,如果用户希望同时打开多个页面,我不想用多个值重载会话。

任何需要在app_code,主页和内容页面之间共享viewstate(或其他存储值的方式)的解决方案?

5 个答案:

答案 0 :(得分:1)

使用HttpContext.Current.Items,它是一个键值对集合,其生命周期为单个Http请求。

答案 1 :(得分:0)

您考虑过Context.Items吗?

答案 2 :(得分:0)

我们在这里谈多少个过滤器?将过滤器值存储在URL中。您是否看到了谷歌或电子商务网站使用的一些网址?它们很长。我是这样做的:

  1. 我将过滤器值存储在查询中,例如www.chart.com?filter1=val1&filter2=val2等。
  2. 我用户JQuery's query plugin在客户端操作查询,然后使用新查询再次从服务器请求图表。
  3. 通过这种方式,我不会查询会话,cookie或类似内容,如果用户想要将书签存储到特定图表或通过电子邮件发送给朋友,他们可以保留过滤器。< / LI>

答案 3 :(得分:0)

我开始认为以下问题中显示的答案将起作用:

ViewState object lost in Master Page Load

通过属性公开所需的变量。

答案 4 :(得分:0)

如果数据不是太长,Cookie就是典型的解决方案。

另一种选择是使用Silverlight隔离存储。 Silverlight控件本身可以是不可见的(没有UI)。