• Code
  • Tags
  • Users
  • Titles
  • Log in
  • Feedback
  • FAQ
Share Code
Welcome to ForkCan.com

ForkCan is all about sharing code in a social way.

Discuss, debate or argue with other devs about their or your own code.

Give other devs feedback or make a Fork (Make a better version of a shared code).

Rate the code, if you use the code mark it as used so others can see if the shared code is used by someone.

Help each other to be better devs and to be more productive.


Features not working yet:

Flag a post


QR Code

Tiny Url

http://4kcan.com/s/MjE2

Related Code
Fork of GZIP your Actions in MVC if not used as standard in IIS7 or only use IIS6
GZIP your Actions in MVC if not used as standard in IIS7 or only use IIS6
Unity Service Locator for ASP.NET MVC 3.0 Beta 1
Google Analytics helper for ASP.NET Razor
Unity Controller Factory for ASP.NET MVC 3.0
ActionFilter to Handle and Log Error for each Controller, ASP.NET MVC
UnitOfWork Action filter for ASP.NET MVC and nHibernate
Make sure the web.config pages/namespace can be used together with ASP.NET MVC 3 P1 and Razor
StringFormat Extension method for HtmlHelper ASP.NET MVC
HttpContextLifetimeManager for Unity
Get Cookies in Web Api Asp .net Mvc 4 RC
ASP.NET MVC 4.0 Web API Message logger for .Net 4.0
Extension to the HttpClient

PagedList class and paging code for ASP.Net MVC (Nothing new but kind of usefull.)

A Pager for ASP.Net MVC, a PageBuilder, A CSS and a HtmlExtension for a pager. I made this a year ago...

2
2.47k 0 1 0 0 1

Nothing new or fancy, but kind of useful in some contexts. Here is a PagedList class for making a List pageable. A builder for making the pager and an Extension to HTML to add it on the page. Maybe something similar will be added to MVC soon. So this is nothing new...

public interface IPagedList
    {
        int TotalRecords { get; }
        int CurrentPage { get; }
        int PageSize { get; }
        int TotalPages { get; }
        bool HasPreviousPage { get; }
        bool HasNextPage { get; }
    }

 public class PagedList<T> : List<T>, IPagedList
        {
            private readonly int _currentPage;
            private readonly int _pageSize = 10;
            private readonly int _skip;
            private readonly int _totalRecords;
            private IEnumerable<T> _list;

            public PagedList(IEnumerable<T> list, int currentPage, int pageSize)
            {
                _pageSize = pageSize;
                _totalRecords = list.Count();
                _skip = (currentPage - 1) * pageSize;
                _currentPage = currentPage;
                AddRange(GetPagedList(list));
            }

            public int TotalRecords
            {
                get { return _totalRecords; }
            }

            public int CurrentPage
            {
                get { return _currentPage; }
            }

            public int PageSize
            {
                get { return _pageSize; }
            }

            public int TotalPages
            {
                get
                {
                    double tempTotalPage = (_totalRecords / (double)_pageSize);
                    return (int)Math.Ceiling(tempTotalPage);
                }
            }

            public bool HasPreviousPage
            {
                get { return (_currentPage > 1); }
            }

            public bool HasNextPage
            {
                get { return (_currentPage < TotalPages); }
            }

            private List<T> GetPagedList(IEnumerable<T> list)
            {
                return list.Skip(_skip).Take(_pageSize).ToList();
            }
        }

And some simple class to generate a Pager:

public class DefaultPagingBuilder : IPagingBuilder
    {
        private const string LINK_FORMAT_CLASSNAME_URLPREFIX_PAGENUMBER_TEXT =
            " <a class=\"{0}\" href=\"{1}/{2}\">{3}</a> ";

        private const string NEXT_PAGING_CLASS = "nextPaging";
        private const string NEXT_TEXT = ">";
        private const string NUMBER_PAGING_CLASS = "numberPaging";
        private const int PAGE_NUMBER_INTERVALL = 7;
        private const string PREVIOUS_PAGING_CLASS = "previousPaging";
        private const string PREVIOUS_TEXT = "<";
        private const string SELECTED_NUMBER_PAGING_CLASS = "selectedNumberPaging";

        public string BuildPager(IPagedList pagedList, string urlPrefix)
        {
            if (pagedList.TotalRecords == 0)
                return string.Empty;

            var pagingStringBuilder = new StringBuilder();

            pagingStringBuilder.Append("<div id=\"pager\">");

            BuildPreviousLink(pagedList, pagingStringBuilder, urlPrefix);

            BuildPageNumbers(pagedList, pagingStringBuilder, urlPrefix);

            BuildNextLink(pagedList, pagingStringBuilder, urlPrefix);

            pagingStringBuilder.Append("</div>");

            return pagingStringBuilder.ToString();
        }

        private static void BuildNextLink(IPagedList pagedList, StringBuilder pagingStringBuilder, string urlPrefix)
        {
            if (pagedList.HasNextPage)
                pagingStringBuilder.Append(RenderPagingLink(NEXT_PAGING_CLASS, urlPrefix, pagedList.CurrentPage + 1,
                                                            NEXT_TEXT));
        }

        private static void BuildPreviousLink(IPagedList pagedList, StringBuilder pagingStringBuilder, string urlPrefix)
        {
            if (pagedList.HasPreviousPage)
                pagingStringBuilder.Append(RenderPagingLink(PREVIOUS_PAGING_CLASS, urlPrefix, pagedList.CurrentPage - 1,
                                                            PREVIOUS_TEXT));
        }

        private static string RenderPagingLink(string styleClass, string urlPrefix, int pageNumber, string text)
        {
            return string.Format(LINK_FORMAT_CLASSNAME_URLPREFIX_PAGENUMBER_TEXT, styleClass, urlPrefix, pageNumber,
                                 text);
        }

        private static void BuildPageNumbers(IPagedList pagedList, StringBuilder pagingStringBuilder, string urlPrefix)
        {
            int startPage = Math.Max(1, pagedList.CurrentPage - PAGE_NUMBER_INTERVALL);
            int endPage = Math.Min(pagedList.TotalPages, pagedList.CurrentPage + PAGE_NUMBER_INTERVALL);
            int pagesShown = endPage - startPage;

            if (pagesShown < PAGE_NUMBER_INTERVALL*2)
            {
                int pagesMissing = PAGE_NUMBER_INTERVALL*2 - pagesShown;
                if (startPage > 1)
                    startPage = Math.Max(1, startPage - pagesMissing);
                else
                    endPage = Math.Min(pagedList.TotalPages, endPage + pagesMissing);
            }

            for (int i = startPage; i <= endPage; i++)
            {
                if (i >= 1 && i <= pagedList.TotalPages)
                {
                    string numberPagingStyleClass = NUMBER_PAGING_CLASS;
                    if (i == pagedList.CurrentPage)
                        numberPagingStyleClass = SELECTED_NUMBER_PAGING_CLASS;

                    pagingStringBuilder.Append(RenderPagingLink(numberPagingStyleClass, urlPrefix, i, i.ToString()));
                }
            }
        }
    }

And a pager Extension to Html on ASP.Net MVC

public static class PagingListExtension
    {
        public static string Pager(this HtmlHelper helper, IPagedList pagedList, string urlPrefix)
        {
            var pageBuilkder = new DefaultPagingBuilder();
            return pageBuilkder.BuildPager(pagedList, urlPrefix);
        }

        public static string LetterPager(this HtmlHelper helper,string currentSortLetter,string urlPrefix)
        {
            return GetLetterPager(currentSortLetter, urlPrefix);
        }

        private static string GetLetterPager(string currentSortLetter,string urlPrefix)
        {
            string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

            var pagerStringBuilder = new StringBuilder();
            foreach (var letter in letters)
            {
                var isSelectedLetter = letter.ToString() == currentSortLetter;
                if (isSelectedLetter)
                    pagerStringBuilder.Append("<b>");

                pagerStringBuilder.Append(GetLetterTag(letter, urlPrefix));

                if (isSelectedLetter)
                    pagerStringBuilder.Append("</b>");
            }
            return pagerStringBuilder.ToString();
        }

        private static string GetLetterTag(char letter,string urlPrefix)
        {
            return @"<a href=" + urlPrefix + "/" + letter + ">"+ letter +"</a> ";
        }

        public static string PagerStatus(this HtmlHelper helper, IPagedList pagedList)
        {
            var pagerStatusStringBuilder = new StringBuilder();
            pagerStatusStringBuilder.Append("<div id=\"pagerStatus\">");

            pagerStatusStringBuilder.Append("<div class=\"pagerStatusPage pagerStatusText\">");
            pagerStatusStringBuilder.AppendFormat("Page:<span class=\"pagerNumber\">{0}</span>", pagedList.CurrentPage);
            pagerStatusStringBuilder.Append("</div>");

            pagerStatusStringBuilder.Append("<div class=\"pagerStatusTotalPages pagerStatusText\">");
            pagerStatusStringBuilder.AppendFormat("av:<span class=\"pagerNumber\">{0}</span>", pagedList.TotalPages);
            pagerStatusStringBuilder.Append("</div>");

            pagerStatusStringBuilder.Append("<div class=\"pagerStatusTotalRecords pagerStatusText\">");
            pagerStatusStringBuilder.AppendFormat("Total hits:<span class=\"pagerNumber\">{0}</span>",
                                                  pagedList.TotalRecords);
            pagerStatusStringBuilder.Append("</div>");

            pagerStatusStringBuilder.Append("</div>");

            return pagerStatusStringBuilder.ToString();
        }


        public static PagedList<T> ToPagedList<T>(this IEnumerable<T> x, int pageNumber, int pageSize)
        {
            return new PagedList<T>(x, pageNumber, pageSize);
        }

        public static PagedList<T> ToPagedList<T>(this IEnumerable<T> x, int pageNumber)
        {
            return new PagedList<T>(x, pageNumber, 10);
        }
    }

And a pages.css file

#pager
{
}

.previousPaging
{
}

.numberPaging
{
}

.selectedNumberPaging
{
    color: Red;
    font-weight: bold;
    text-decoration: none;
}

.nextPaging
{
}

.pagerStatus
{
}

.pagerStatusPage
{
}

.pagerStatusTotalPages
{
}

.pagerStatusTotalRecords
{
}
.pagerNumber
{
}

Eg:

  <%= Html.PagerStatus(Model.Projects) %><br /><br />
  <%= Html.Pager(Model.Projects, "/Project/ListAllProjects/"+ Model.SortOrder)%>

For a Pager based on chars like A B C D

<%= Html.LetterPager(Model.Projects .... )  %>

Model Eg of the model prop:

public PagedList<IProject> Projects { get; set; }

And to convert a IList to a PagedList

 projectModel.Projects = projects.ToPagedList(pageNumber, 30);

this tells you that your List shall be a PagedList and what page you will start from and how many rerult each page... Default is 10.


Share: twitter | facebook   Action: used | fork | flag

aspmvc

Mark 'aspmvc' tag as 'like'

Mark 'aspmvc' tag as 'ignore'

c#

Mark 'c#' tag as 'like'

Mark 'c#' tag as 'ignore'

mvc

Mark 'mvc' tag as 'like'

Mark 'mvc' tag as 'ignore'

pagedlist

Mark 'pagedlist' tag as 'like'

Mark 'pagedlist' tag as 'ignore'


 @johannormen "Code Contributor"
1.24k
July 23, 2010 12:05 AM
edited July 23, 2010 2:01 PM

Fork

 PagedList class and paging code for ASP.Net MVC (Nothing new but kind of usefull.) -  @johannormen Friday 23, 2010 12:05 AM


1 Feedback

Very nice! Thanks! -  @toha73 Monday 09, 2010 1:30 PM

You must log in before you can give any feedback


1 Discussion(s)

Newest Oldest
0

You can try another PagedListExt library for PagedList. It can be installed by nuget-pakage

link | flag  | Reply

 Calabonga
10
Monday 08, 2011 10:44 AM


You must log in before you can post a comment

Squeed
Made by: Fredrik Normén 2010