【发布时间】:2012-09-13 22:37:54
【问题描述】:
我正在使用以下方法为我的 jqgrid 的子网格获取数据,并且它的工作完全正常。
请注意,此方法用于实现服务器端排序和分页。
现在我的查询就像你在该行中看到的那样
List<SomeEntity> myList = _service.GetSomeData(id); 这里进行了数据库调用并获取了所有记录。
所以我不是很确定,所以我只是想知道这是否符合实现服务器端分页的最佳实践和
public JsonResult GetData(string folderId, string sidx, string sord, int page, int rows) {
int id = int.Parse(folderId);
List < SomeEntity > myList = _service.GetSomeData(id);
const int pageSize = 5;
// total
double totalPages = Math.Ceiling((double) myList.Count() / pageSize);
// sort
if (sord == "asc") {
myList = myList.OrderBy(m = > m.Name).ToList();
}
else {
myList = myList.OrderByDescending(m = > m.Name).ToList();
}
// paging
myList = myList.Skip((page - 1) * pageSize).Take(pageSize).ToList();
var jsonData = new {
total = totalPages, records = domainList.Count, page,
rows = myList
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
【问题讨论】:
-
这个问题你可能不得不问自己这是否完全有必要。您可以使用可以处理大量数据的许多不同组件(slickgrid、jqGrid、数据表等)通过前端处理分页和排序。想要在服务器端做的原因是什么?
-
通常,在服务器端处理它会减少发送到客户端的数据量 - 如果它们处于绳索连接上,这很方便。也意味着在页面之间导航将获取自加载第一页以来输入的任何新数据
-
谢天谢地,如今绳索连接已成为少数,因为大多数人都有宽带连接。是否有机会通过移动设备使用此网站?
-
@logicalChimp 同意,但有一些方法可以使用时间戳来处理这个问题。我做了一个非常相似的事情,但定期询问服务器“自这个时间戳以来发生了什么变化”(通过 ajax),我只取回通常非常小的最新变化(然后动态更新网格)。最初页面的第一次加载接收到的数据量最大(因为 timstamp 为 0),但我们没有遇到大量 json 数据的任何问题。
-
如果您使用客户端排序/分页,您如何处理IE7/8 200+记录变得非常缓慢的情况?
标签: c# jquery asp.net-mvc-2 jqgrid jqgrid-asp.net