在c#中单击数据库中的按钮,先加载20个然后接下来的20个项目

时间:2012-05-30 11:35:22

标签: c# asp.net asp.net-mvc-3

我想做一些像分页这样的事情。假设我们的数据库中有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个。我的意思是当用户点击按钮时,将使用AJAX请求从数据库中提取下一个接下来的20个联系人。在之前的那些之后附加新的20个联系人......

3 个答案:

答案 0 :(得分:4)

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

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

注意:这不考虑您获得Contacts的方式。但我猜你已经知道:)此外,假设pageNumber是0基础 如果您使用的是Linq-To-SQL或Linq-To-Entities,则对SkipTake的调用也将转换为最终数据库查询的一部分。

答案 1 :(得分:2)

你去吧

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

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

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

答案 2 :(得分:0)

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