【问题标题】:How to get the back button and session state to work together?如何让后退按钮和会话状态一起工作?
【发布时间】:2012-01-02 08:31:35
【问题描述】:

这可能有一个简单的答案,但我只是看不到它 b/c 我离项目太近了 - 就这样吧。

我有一个 asp.net 2.0 搜索应用程序。它是一系列以搜索表单开始并以显示给用户的结果结束的页面。在搜索和结果页面之间是一个过滤器页面,它显示了一系列过滤器,用户可以将搜索结果向下过滤到。我在搜索页面上执行初始搜索并将结果存储在会话中。如果初始搜索结果的总数超过一定数量(为了示例,我们假设为 50),则用户将被带到过滤器页面。在那里,他们会看到一些可以应用于结果的过滤器。

将所选过滤器应用于搜索结果后,如果计数仍超过 50 个,则它们会留在页面上,而只有未选择的过滤器仍会显示在页面上。如果计数小于 50,则将它们带到结果页面。现在,如果他们在过滤器页面上但希望查看结果,则有一个按钮可以获取结果的当前状态并将用户带到结果页面。

这是我的问题 - 如果我在应用一些过滤器后在结果页面上并单击后退按钮(没有页面缓存),我怎样才能获得以前的搜索状态在应用我选择的任何过滤器之前的结果?更进一步,如果我在一系列说 4 个“应用过滤器”之后进入结果页面(应用过滤器 - 仍然超过 50,应用其他过滤器 - 仍然超过 50,应用另一个过滤器 - 仍然超过 50,最后应用另一个过滤器- 是的!50 岁以下进入结果页面),如果我一直按返回按钮,如何从会话中获取每个版本的不断缩小的搜索结果?

对不起,如果这有点奇怪而且不太容易理解 - 这是一个不够简单的问题,不能用几个简单的句子来概括。

我最渴望任何想法(与手头的问题有关)或问题。

更新 - 仅供参考,我没有决定多页设计。一项要求表明它遵循现有第三方搜索应用程序的流程(逆向工程非常棒,对吧?)。

谢谢

【问题讨论】:

  • 也许您应该将搜索和过滤信息保留在 url 而不是会话状态中。我已经在搜索应用程序上工作了几年,我希望我先走这条路。想想书签,如果用户将结果页面添加为书签,如果他明天可以从书签中获取结果,那对他来说会很好。如果您将搜索参数存储在会话状态中,则不能这样做。
  • 我假设这是 Web 表单,而您正在将项目放入会话中。你能发布一些代码。您是否可以在模式弹出窗口中进行一些改进以避免从一个页面到另一个页面?
  • 很遗憾,出于安全原因,我无法发布任何代码。

标签: asp.net search session-state back


【解决方案1】:

不要太挑剔,但你所描述的听起来像是一种处理搜索的严重提升方式。

通常,您的搜索条件和结果在同一页面上。当您修改条件并单击搜索时,您应该只显示前 50 个结果并让他们知道还有更多结果。这不可能比您所描述的操作更昂贵,因为无论如何您都必须在这两种情况下运行查询。

看看 NewEgg.com 并尝试来自this page 的“高级搜索”。您会注意到左侧有大约 20 个不同的标准因素。当您添加新标准时,页面顶部的面包屑会发生变化。它们在面包屑中的每个旁边都有一个小 (x),因此您可以快速从搜索结果中消除任何条件。瞧,不需要后退按钮。

请注意,您在任何时候都不需要会话状态来处理此问题。如果他们真的愿意,您最多可以使用仍然支持在浏览器中使用后退按钮的隐藏表单字段。

【讨论】:

  • 我同意,但多页设计已经由需求决定了。我真的只需要关于如何解决手头问题(asp.net 会话状态和后退按钮)的建议,而不是关于流程的讨论。
  • @DanAppleyard:那么只使用隐藏字段而不是会话状态来存储您的过滤器数据?这种方式状态是由客户端请求决定的,而不是服务器认为的下一步。
【解决方案2】:

按原样使用当前基于会话的参数,但让任何查询字符串参数覆盖它们。这样您就可以保留您的值,而无需将它们分配给每个 url,但可以调整到任何以前的手动数据输入(浏览器历史记录中的查询字符串)。

(并且不要使用 POST 进行搜索。)

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多