Search code examples
asp.net-mvcaspnetboilerplate

a simple approach for paging and sorting in aspnetboilerplate


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.


Solution

  • 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);
    }