2011-12-15 74 views
1

对此可能有一个简单的答案,我只是没有看到它B/C我太靠近项目 - 就这样吧。如何让后退按钮和会话状态一起工作?

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

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

这里是我的问题 - 如果我在结果页面上应用一些过滤器后,点击后退按钮(无页面缓存),我怎样才能得到搜索结果的前一个状态的任何过滤器之前我选择了已经申请?更进一步,如果我在一系列说4“应用过滤器”之后到达结果页面(应用过滤器 - 仍然超过50,应用其他过滤器 - 仍然超过50,再应用另一个过滤器 - 仍然超过50,最后应用另一个过滤器 - yay!50以下去结果页面),如果我继续点击后退按钮,如何从会话中获取每个版本的不断缩小的搜索结果?

对不起,如果这有点奇怪,并不容易理解 - 这是一个不够简单的问题,只是把它包装在一些简单的句子。

我非常渴望任何想法(与手边的问题有关)或问题。

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

感谢

+0

也许你应该让你的搜索和过滤信息的网址,而不是在会话状态。我在搜索应用程序上工作了几年,我希望我先走了。 只要想一想书签,如果用户为结果页面添加书签,如果他明天可以从书签中获得他的结果,那对他来说会很好。如果将搜索参数存储在会话状态中,则不能这样做。 – Johnny5 2011-12-15 20:31:37

+0

我假设这是网络表单,并且您正在将项目放入会话中。你可以发布一些代码吗?你是否可以在模态弹出窗口中进行一些改进,以避免页面间的冲突? – 2011-12-15 20:32:14

回答

0

不是太重要,但你描述听起来像一个认真什么抬高了处理搜索的方式。

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

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

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

0

按原样使用当前基于会话的参数,但让任何查询字符串参数覆盖它们。这样,你可以保持你的值不分配给每个url,但是可以适应任何以前的手动数据库(查询历史记录中的查询字符串)。

(不要使用POST搜索。)