我们正在编写一个搜索应用程序,它将搜索条件保存到会话状态并在 asp.net 更新面板中执行搜索。有时当我们连续执行多次搜索时,第二次或第三次搜索有时会返回第一组搜索条件的结果。
示例:我们的第一次搜索我们查找“John Smith” -> 显示 John Smith 结果。我们在“Bob Jones”上进行的第二次搜索 -> 显示 John Smith 结果。
正如我所说,我们将所有搜索条件保存在会话状态中,并从 ajax 请求内部的会话状态中读取它以格式化 DB 查询。当我们在 VS 中设置断点时,一切都会正常运行,但没有它们,我们会得到原始的搜索条件和结果。
我的猜测是因为它们保存在会话中,ajax 请求以某种方式获取自己的会话并将条件保存到该会话中,然后每次都从该会话中检索条件,但是非异步的东西能够看到条件何时被修改并相应地保存对状态的更改,但是因为它们来自两个不同的会话,所以保存和读取的内容存在差异。
编辑::: 为了详细说明,有人建议将搜索条件附加到查询字符串中,这通常是一种很好的做法,我同意它应该是这样的,但按照我们的要求,我认为它不可行。他们想要它,以便用户填写输入控件点击搜索并且没有页面重新加载,他们唯一看到的是页面上的进度指示器,并且他们仍然能够导航和使用当前页面上的其他功能。如果我要向查询字符串添加条件,我将不得不执行另一个请求,导致整个页面加载,这取决于搜索条件可能需要很长时间。这就是为什么我们使用 ajax 调用来执行搜索以及为什么我们没有引起另一个完整页面请求的原因......我希望这可以澄清情况。