is there any simple way for implementing paging in presentation layer in asp.net boilerplate solution like PagedList
in PagedList.Mvc
Nuget package.
I installed PagedList.Mvc
package from Nuget gallery and change my Index method to this :
public async Task<ActionResult> Index(int? page)
{
var pageIndex = (page ?? 1) - 1; //NewsService expects a 0 for the first page
var pageSize = 3;
int totalUserCount; // will be set by call to GetAllNews due to _out_ paramter :-|
var newsResult = await _newsAppService.GetAllNews(new PagedResultRequestDto { MaxResultCount = pageSize });
totalUserCount = newsResult.TotalCount;
var news = newsResult.Items;
var newsAsIPagedList = new StaticPagedList<NewsDto>(news, pageIndex + 1, pageSize, totalUserCount);
ViewBag.OnePageOfNews = newsAsIPagedList;
var model = new NewsListViewModel
{
News = news
};
return View(model);
}
and in View I add this under the news table :
@Html.PagedListPager((IPagedList)ViewBag.OnePageOfNews, page => Url.Action("Index", new { page }))
but when i click on number for example number 2 or 3 the table refresh but change data.
ASP.NET Boilerplate doesn't provide this, but it's simple to use PagedList.Mvc
as you suggested.
It's easy to modify UsersController.Index
to use manual paging:
public async Task<ActionResult> Index(int? page)
{
var pageIndex = (page ?? 1) - 1;
var pageSize = 10;
int totalUserCount;
var skipCount = pageIndex * pageSize;
var pagedResult = await _userAppService.GetAll(new PagedResultRequestDto { MaxResultCount = pageSize, SkipCount = skipCount });
totalUserCount = pagedResult.TotalCount;
var users = pagedResult.Items;
var usersAsIPagedList = new StaticPagedList<UserDto>(users, pageIndex + 1, pageSize, totalUserCount);
ViewBag.OnePageOfUsers = usersAsIPagedList;
// Code below unchanged
var roles = (await _userAppService.GetRoles()).Items;
var model = new UserListViewModel
{
Users = users,
Roles = roles
};
return View(model);
}