【问题标题】:Something like viewstate and session像视图状态和会话
【发布时间】:2009-11-25 15:19:08
【问题描述】:

我遇到的问题如下:

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

这些按钮的事件将特定值放入与数据库查询不同的值的会话中。本质上,这些按钮充当图表的过滤器。

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

起初,我想使用视图状态而不是会话,但后来意识到母版页和内容页不共享相同的视图状态。

目前,我正在考虑为 sesson 键使用前缀,以识别过滤器实际存在于哪个页面。但是,如果用户希望同时打开多个页面,我不想让会话过载。

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

【问题讨论】:

  • 那么,您的意思是,当您重定向到新页面时,您希望过滤器具有默认值而不是前一页的值?
  • 我是这个项目的另一位开发人员。部分问题是我们用来显示各种图表的系统有四个屏幕。每个屏幕(带有一个浏览器实例)都需要能够跟踪它过滤的内容与其他屏幕不同。因此我们最初使用了视图状态。 Session 只是一个实例,因此当您更新一个浏览器时,它会使用来自任何其他实例的最新更改的所有过滤器。
  • 过滤值有多长,有多少?你考虑过 URL 查询吗?
  • 过滤器值本身不会太长。但是,可能有大约 10 种不同类型的过滤器,这些过滤器在页面中并不固定。页面上显示的过滤器数量是通过母版页中的属性设置的。 URL 解决方案确实有一些吸引人的方面,主要是用户可以为预设过滤器选择添加书签。然而,主要缺点是用户将能够看到过滤器的不同参数(数据库攻击),以及查询中存在的十个不同过滤器的可能长度。
  • Josh,您如何将过滤器参数添加到查询字符串中?有没有办法在不手动重定向页面的情况下做到这一点?

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


【解决方案1】:

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

【讨论】:

  • 这听起来像是解决我的问题的正确方向。但是,由于它只有一个请求的生命周期,用户是否能够选择多个过滤器并让这些值在不同的选择中保持不变?
  • 在多页的情况下,也就是多个Http Request,不行,这样不行。
【解决方案2】:

你考虑过Context.Items吗?

【讨论】:

    【解决方案3】:

    我们在这里讨论了多少个过滤器?将过滤器值存储在 URL 中。你见过谷歌或电子商务网站使用的一些网址吗?它们很长。这是我的做法:

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

    【讨论】:

      【解决方案4】:

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

      ViewState object lost in Master Page Load

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

      【讨论】:

        【解决方案5】:

        如果数据不太长,cookie 是一种典型的解决方案。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多