Thursday, March 16, 2017

Paging


Paging Model:

public class PagingModel
    {
        public string TotalItems { get; set; }

        public string ItemsPerPage { get; set; }

        public string CurrentPage { get; set; }

        public string NumberOfPages { get; set; }

        public string FirstItem { get; set; }

        public string LastItem { get; set; }

        public string NextPage { get; set; }

        public string NextPageUrl { get; set; }

        public string PreviousPage { get; set; }

        public string PreviousPageUrl { get; set; }

        public string PreviousButtonStyle { get; set; }

        public string NextButtonStyle { get; set; }

    }


Helper Class:

public static class PagingExtensions
    {
        public static PagingModel BuildPagingModel(IEnumerable<object> items, int itemsPerPage, int currentPage, string baseUrl, string queryString)
        {

if (items == null || items.Count() < 1 || items.Count() <= itemsPerPage)
            {
                PagingModel hiddenPagingModel = new PagingModel
                {
                    ShowPaging = false
                };

                return hiddenPagingModel;

            }


            int firstItem = currentPage * itemsPerPage - itemsPerPage + 1;
            int numberOfPages = (items.Count() % itemsPerPage == 0) ? items.Count() / itemsPerPage : items.Count() / itemsPerPage + 1;

            PagingModel pagingModel = new PagingModel
            {
                ItemsPerPage = itemsPerPage.ToString(),
                CurrentPage = currentPage.ToString(),
                TotalItems = items.Count().ToString(),
                FirstItem = firstItem.ToString(),
                LastItem = (firstItem + itemsPerPage - 1).ToString(),
                NumberOfPages = numberOfPages.ToString(),
                NextPage = (currentPage + 1).ToString(),
                PreviousPage = (currentPage == 1) ? "" : (currentPage - 1).ToString(),
                NextPageUrl = (currentPage < numberOfPages) ? UrlHelperExtensions.GetUpdatedUrl(baseUrl, "page", (currentPage + 1).ToString(), queryString) : "",
                PreviousPageUrl = (currentPage > 1) ? UrlHelperExtensions.GetUpdatedUrl(baseUrl, "page", (currentPage - 1).ToString(), queryString) : "",
                PreviousButtonStyle = "blue",
                NextButtonStyle = "blue"
            };

            //on last page
            if(currentPage == numberOfPages)
            {
                pagingModel.LastItem = items.Count().ToString();
                pagingModel.NextPage = "1";
                pagingModel.NextButtonStyle = "gray";
            }          

            //on first page
            if (pagingModel.CurrentPage == "1")
            {
                pagingModel.PreviousButtonStyle = "gray";
            }
            return pagingModel;
        }

    }


In controller:

private string _claimsPageUrl = Sitecore.Configuration.Settings.GetSetting("MemberPortalUrl") + "/claims/claims-landing";
        private int _claimsPerPage = 3;
        private int _currentPage = 1;
private int _itemsPerPage = 3;



//Paging

                if (!string.IsNullOrEmpty(Request.QueryString["page"]))
                {
                    int.TryParse(Request.QueryString["page"], out currentPage);
                }
                else
                {
                    currentPage = 1;
                }

                model.Paging = PagingExtensions.BuildPagingModel(model.Newsletters, _itemsPerPage, currentPage, _newslettersPageUrl, Request.QueryString.ToString());
                model.Newsletters = model.Newsletters.Skip((currentPage - 1) * _itemsPerPage).Take(_itemsPerPage);
         
In View:

ViewModel:

public class ClaimsListingDetailModel
    {
        public string PastMonths { get; set; }
        public string CurrentMember { get; set; }
        public Member Member { get; set; }

        public IEnumerable<Claim> Claims { get; set; }      

        public SelectList TimeRange { get; set; }

        public SelectList MemberList { get; set; }

        public bool Authorized { get; set; }

        public PagingModel Paging { get; set; }

    }

<div class="heading-group no-shrink pagination-area">
                  <span class="portal-label heading-group">Claims @Model.Paging.FirstItem - @Model.Paging.LastItem <span class="portal-label-subtle">of @Model.Paging.TotalItems</span></span>
                  <span class="heading-group">
                    <a class="svgicon icon-back-arrow-@Model.Paging.PreviousButtonStyle" href="@Model.Paging.PreviousPageUrl"></a>
                    <a class="svgicon icon-forward-arrow-@Model.Paging.NextButtonStyle" href="@Model.Paging.NextPageUrl"></a>
                  </span>

                </div>


No comments:

Post a Comment