在JsonResult中实现分页

时间:2018-02-27 19:19:53

标签: c# json asp.net-mvc

我们可以在C#中实现分页,在ActionResult函数中实现ASP.NET这样的

public ActionResult Index(int? page)
{
    Entities db = new Entities();
    return View(db.myTable.ToList().ToPagedList(page ?? 1,8 ));
}

如何在JsonResult函数中实现分页,将结果发送到html视图中的ajax?

public JsonResult GetSearchingData(string SearchBy, string SearchValue)
{
    var subCategoryToReturn = myList.Select(S => new { Name = S.Name });
    return Json(subCategoryToReturn, JsonRequestBehavior.AllowGet);
}

2 个答案:

答案 0 :(得分:0)

您可以使用.Skip()跳过前n个元素,使用Take()来获取下n行。

int pageNumber = 0;
int ItemsPerPage= 10;
var Results = db.myTable.ToList().Skip(ItemsPerPage* pageNumber).Take(numberOfObjectsPerPage);

假设每页只需要10个项目。页数将等于

TotalPages = Math.Ceiling(TotalItems/ItemsPerPage); // IF 201 Items then 201/10 ceiling = 21 pages

现在你可以在html中制作分页按钮了。我建议你使用Jquery Pagniation Library https://esimakin.github.io/twbs-pagination/

答案 1 :(得分:0)

不再考虑用户界面并开始考虑数据。

您有一些想要分页的数据。就是这样。暂时忘掉MVC或JSONResult或与数据无关的任何其他内容。

有一点需要注意,您在上面发布的代码:

db.myTable.ToList().ToPagedList(page ??1,8 )

如果你这样做,你的整个表将从数据库返回,然后它将被分页。你想要的只是返回已经分页的数据,所以不是返回100条记录,而是只拿前20条,只返回20条。

此时不要使用ToList(),而是使用类似的东西:

var myData = db.myTable.Skip(pageNumber * pageSize).Take(pageSize)

我没有任何正在运行的代码来检查这一点,但希望您明白这一点,只返回已经分页的数据,因此只返回您将显示的数据,仅此而已。 UI可以发送您单击的页面索引,pageSize可以是存储在appSettings中的预定义数字。例如。