使用asp.net MVC分页搜索结果

时间:2009-11-02 20:50:45

标签: asp.net asp.net-mvc pagination paging

我有一种情况,我无法通过我在这里的搜索找到解决方案。这是场景:

我有一个包含2个必填字段和多个可选字段的搜索表单。表单发布到一个操作方法,该方法确定选择哪些字段并构建List<>符合搜索条件的对象。然后我传递了List<>到视图显示。

我遇到的这个问题涉及如何使用asp.net mvc进行分页。对于过去的项目,我使用了一个自定义的Html帮助程序来创建包含查询参数和“页面”参数的链接。然后它使用GET请求和.Take()。Skip()格式。

我在这个项目上遇到了障碍,因为我无法使用GET请求获取搜索条件,我无法想出一种方法来保持List<>在内存中做通常的“页面”参数技巧。

我考虑过存储List<>在会话中但对象和列表可能非常大。

我认为这是高级搜索表单的一个热门问题,但我似乎无法找到一个好的解决方案。任何帮助,将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:4)

如何缓存搜索结果对象并为其提供唯一键。然后,您可以将您的分页链接引用为唯一(SearchID)并让您的操作查找该对象,从缓存中提取它并从那里跳过/获取。

这不会为每个请求重建对象,使页面加载速度更快,并减少数据库/应用程序的压力。

这是一篇关于缓存的文章:

http://aspnet.4guysfromrolla.com/articles/100902-1.aspx

以下是有关缓存的视频:

http://www.asp.net/learn/Videos/video-6206.aspx

注意:请确保在缓存的对象上指定过期日期。

答案 1 :(得分:2)

如果我理解正确,您只想加载搜索结果一次,然后翻阅它们。

您是否研究过任何jQuery分页功能?您可以将整个列表转储到页面,并使用JavaScript来处理分页(如果您愿意,还可以进行排序)。

可以在http://beckelman.net/demos/jqueryTableSorterConPaging/default.aspx

找到一个示例

答案 2 :(得分:1)

将所有内容放在相同的表单中:必填字段,可选字段和页面链接。

两种可能性:

  1. 使用提交按钮或图片代替锚标签,每个页面链接都有不同的名称(例如page1page2,...):这样您就可以获得所需的页面了表格已提交。
  2. 在表单中放置一个隐藏字段。然后将javascript单击处理程序添加到任何页面锚点。此处理程序将使用页面更新隐藏字段的值,提交表单并取消事件。
  3. 因此,点击任何寻呼机链接将提交表格,其中包含构建列表和寻呼机链接所需的所有数据。