如何让后退按钮和会话状态一起工作



可能有一个简单的答案,我只是没有看到它,因为我太接近这个项目-所以它。

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

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

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

很抱歉,如果这有点奇怪,不那么容易理解-这是一个不够简单的问题,只是用几个简单的句子来包装它。

我非常渴望得到任何想法(关于手头的问题)或问题。

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

谢谢

不是太挑剔,但是您描述的处理搜索的方式听起来很糟糕。

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

看看NewEgg.com,从这个页面试试他们的"高级搜索"。你会注意到左边有大约20个不同的标准因素。当您添加新条件时,页面顶部的面包屑会发生变化。他们在每个面包屑旁边都有一个小(x),这样你就可以快速地从搜索结果中删除任何条件。瞧,不需要后退键了。

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

按原样使用当前基于会话的参数,但让任何查询字符串参数覆盖它们。通过这种方式,您可以保留您的值,而不必将它们分配给每个url,但可以适应以前的任何手动数据输入(浏览器历史记录中的查询字符串)。

(不要用POST搜索)

最新更新