我想做一些像分页这样的事情。假设我们的数据库中有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个联系人......
答案 0 :(得分:4)
return Contacts.Skip(PageSize * pageNumber).Take(PageSize).ToList();
注意:这不考虑您获得Contacts
的方式。但我猜你已经知道:)此外,假设pageNumber
是0基础
如果您使用的是Linq-To-SQL或Linq-To-Entities,则对Skip
和Take
的调用也将转换为最终数据库查询的一部分。
答案 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。