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

Asp.net 如何让后退按钮和会话状态一起工作?,asp.net,search,session-state,back,Asp.net,Search,Session State,Back,可能有一个简单的答案,我只是不认为它b/c我太接近该项目-所以就这样吧 我有一个asp.net 2.0搜索应用程序。它是一系列页面,以搜索表单开始,以向用户显示结果结束。在搜索和结果页面之间是一个过滤器页面,该页面显示一系列过滤器,用户可以向下过滤搜索结果。我在搜索页面上执行初始搜索,并将结果存储在会话中。如果初始搜索结果总数超过某个数字(为了示例起见,我们假设为50),用户将被带到过滤器页面。在那里,他们提供了许多可以应用于结果的过滤器 将选定的筛选器应用于搜索结果后,如果计数仍然超过50,则

可能有一个简单的答案,我只是不认为它b/c我太接近该项目-所以就这样吧

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

将选定的筛选器应用于搜索结果后,如果计数仍然超过50,则这些筛选器将保留在页面上,页面上仅显示未选定的筛选器。如果计数小于50,则会将其带到结果页面。现在,如果他们在过滤器页面上,但希望看到结果,则会有一个按钮,用于获取结果的当前状态,并将用户带到结果页面

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

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

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

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


谢谢你不要太挑剔了,但是你所描述的听起来像是一种处理搜索的方法

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

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


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

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


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

也许你应该将搜索和过滤信息保留在url上,而不是会话状态。我已经在一个搜索应用程序上工作了几年,我希望我先这样做。想想书签吧,如果一个用户把一个结果页面加入书签,如果他明天能从书签中得到结果,那对他来说就太好了。如果在会话状态下存储搜索参数,则无法执行此操作。我假设这是web表单,并且您正在会话中放置项目。你能发一些代码吗。您是否能够在模式弹出窗口中进行一些改进,以避免从一页转到另一页?不幸的是,出于安全原因,我无法发布任何代码。我同意,但多页设计已经由需求决定。我真的只需要关于如何解决手头的问题的建议(asp.net会话状态和“返回”按钮),而不是关于流的讨论。@DanAppleyard:那么只使用隐藏字段而不是会话状态来存储筛选数据?这样,状态由客户机请求决定,而不是由服务器认为下一步是什么决定。