1

我想做一些类似分页的事情。假设我们的数据库中有 100 个联系人。当我的索引页面第一次加载时,它会从数据库中加载 20 个联系人项目。页面末尾有一个“更多”按钮。当用户单击该按钮时,我想从数据库中加载接下来的 20 个项目并将它们显示在已显示的联系人下方。

 public ActionResult Index(int no)
 {
     var contacts = GetContactFromDB(no) //no is used to know what is the current page number
 }

 public IList<Contact> GetContactFromDB(int pagenumber)
 {
      // here  write the query to get next 20 items 
  }

我想我忘了说的一件事是我不想丢失前 20 个。我的意思是当用户单击按钮时,接下来的 20 个联系人将使用 AJAX 请求从数据库中获取并附加那些新的前一个联系人之后的 20 个联系人...

4

3 回答 3

4

只需使用 Linq 中的SkipTake扩展方法的组合:

return Contacts.Skip(PageSize * pageNumber).Take(PageSize).ToList();

注意:这没有考虑到你如何获得Contacts. 但我想你已经知道了:) 另外,它假设它pageNumber是基于 0 的。
如果您使用的是 Linq-To-SQL 或 Linq-To-Entities,对 和 的调用SkipTake将被转换为最终数据库查询的一部分。

于 2012-05-30T11:37:37.687 回答
2

干得好

public IList<Contact> GetContactFromDB(int pagenumber)
 {
      return context.Contacts.OrderBy(p=>p).Skip(pagenumber*10).Take(10).ToList();
 }

您可以使用您想要的联系人类的任何字段进行排序。

此外,我建议您将要在每个页面中显示的联系人数量(在本例中为 10)存储在某个常量中。它将使您的代码更通用。

于 2012-05-30T11:38:01.903 回答
0

在 asp.net 表单中,我会用当前索引 (20, 40) 隐藏,并且总是从 x-20 到 x。

于 2012-05-30T11:41:21.590 回答