示例#1
0
        ///<summary>
        ///	Displays a configurable paging control for instances of PagedList.
        ///</summary>
        ///<param name = "html">This method is meant to hook off HtmlHelper as an extension method.</param>
        ///<param name = "list">The PagedList to use as the data source.</param>
        ///<param name = "generatePageUrl">A function that takes the page number  of the desired page and returns a URL-string that will load that page.</param>
        ///<param name = "options">Formatting options.</param>
        ///<returns>Outputs the paging control HTML.</returns>
        public static MvcHtmlString PagedListPager(this System.Web.Mvc.HtmlHelper html,
                                                   IPagedList list,
                                                   Func <int, string> generatePageUrl,
                                                   PagedListRenderOptions options)
        {
            var listItemLinks = new List <TagBuilder>();

            //first
            if (options.DisplayLinkToFirstPage)
            {
                listItemLinks.Add(First(list, generatePageUrl, options.LinkToFirstPageFormat));
            }

            //previous
            if (options.DisplayLinkToPreviousPage)
            {
                listItemLinks.Add(Previous(list, generatePageUrl, options.LinkToPreviousPageFormat));
            }

            //text
            if (options.DisplayPageCountAndCurrentLocation)
            {
                listItemLinks.Add(PageCountAndLocationText(list, options.PageCountAndCurrentLocationFormat));
            }

            //text
            if (options.DisplayItemSliceAndTotal)
            {
                listItemLinks.Add(ItemSliceAndTotalText(list, options.ItemSliceAndTotalFormat));
            }

            //page
            if (options.DisplayLinkToIndividualPages)
            {
                //calculate start and end of range of page numbers
                var start = 1;
                var end   = list.PageCount;
                if (options.MaximumPageNumbersToDisplay.HasValue && list.PageCount > options.MaximumPageNumbersToDisplay)
                {
                    var maxPageNumbersToDisplay = options.MaximumPageNumbersToDisplay.Value;
                    start = list.PageNumber - maxPageNumbersToDisplay / 2;
                    if (start < 1)
                    {
                        start = 1;
                    }
                    end = maxPageNumbersToDisplay;
                    if ((start + end - 1) > list.PageCount)
                    {
                        start = list.PageCount - maxPageNumbersToDisplay + 1;
                    }
                }

                //if there are previous page numbers not displayed, show an ellipsis
                if (options.DisplayEllipsesWhenNotShowingAllPageNumbers && start > 1)
                {
                    listItemLinks.Add(Ellipses(options.EllipsesFormat));
                }

                foreach (var i in Enumerable.Range(start, end))
                {
                    //show delimiter between page numbers
                    if (i > start && !String.IsNullOrWhiteSpace(options.DelimiterBetweenPageNumbers))
                    {
                        listItemLinks.Add(WrapInListItem(options.DelimiterBetweenPageNumbers));
                    }

                    //show page number link
                    listItemLinks.Add(options.FunctionToDisplayEachPageNumber == null
                                                                                         ? Page(i, list, generatePageUrl, options.LinkToIndividualPageFormat)
                                                                                         : Page(i, list, generatePageUrl, options.FunctionToDisplayEachPageNumber));
                }

                //if there are subsequent page numbers not displayed, show an ellipsis
                if (options.DisplayEllipsesWhenNotShowingAllPageNumbers && (start + end - 1) < list.PageCount)
                {
                    listItemLinks.Add(Ellipses(options.EllipsesFormat));
                }
            }

            //next
            if (options.DisplayLinkToNextPage)
            {
                listItemLinks.Add(Next(list, generatePageUrl, options.LinkToNextPageFormat));
            }

            //last
            if (options.DisplayLinkToLastPage)
            {
                listItemLinks.Add(Last(list, generatePageUrl, options.LinkToLastPageFormat));
            }

            //append class to first item in list?
            if (!String.IsNullOrWhiteSpace(options.ClassToApplyToFirstListItemInPager))
            {
                listItemLinks.First().AddCssClass(options.ClassToApplyToFirstListItemInPager);
            }

            //append class to last item in list?
            if (!String.IsNullOrWhiteSpace(options.ClassToApplyToLastListItemInPager))
            {
                listItemLinks.Last().AddCssClass(options.ClassToApplyToLastListItemInPager);
            }

            //append classes to all list item links
            foreach (var li in listItemLinks)
            {
                foreach (var c in options.LiElementClasses ?? Enumerable.Empty <string>())
                {
                    li.AddCssClass(c);
                }
            }

            //collapse all of the list items into one big string
            var listItemLinksString = listItemLinks.Aggregate(
                new StringBuilder(),
                (sb, listItem) => sb.Append(listItem.ToString()),
                sb => sb.ToString()
                );

            var ul = new TagBuilder("ul")
            {
                InnerHtml = listItemLinksString
            };

            foreach (var c in options.UlElementClasses ?? Enumerable.Empty <string>())
            {
                ul.AddCssClass(c);
            }

            var outerDiv = new TagBuilder("div");

            foreach (var c in options.ContainerDivClasses ?? Enumerable.Empty <string>())
            {
                outerDiv.AddCssClass(c);
            }
            outerDiv.InnerHtml = ul.ToString();

            return(new MvcHtmlString(outerDiv.ToString()));
        }
示例#2
0
        ///<summary>
        ///	Displays a configurable paging control for instances of PagedList.
        ///</summary>
        ///<param name = "html">This method is meant to hook off HtmlHelper as an extension method.</param>
        ///<param name = "list">The PagedList to use as the data source.</param>
        ///<param name = "generatePageUrl">A function that takes the page number  of the desired page and returns a URL-string that will load that page.</param>
        ///<param name = "options">Formatting options.</param>
        ///<returns>Outputs the paging control HTML.</returns>
        public static MvcHtmlString PagedListPager(this System.Web.Mvc.HtmlHelper html,
												   IPagedList list,
												   Func<int, string> generatePageUrl,
												   PagedListRenderOptions options)
        {
            var listItemLinks = new List<TagBuilder>();

            //first
            if (options.DisplayLinkToFirstPage)
                listItemLinks.Add(First(list, generatePageUrl, options.LinkToFirstPageFormat));

            //previous
            if (options.DisplayLinkToPreviousPage)
                listItemLinks.Add(Previous(list, generatePageUrl, options.LinkToPreviousPageFormat));

            //text
            if (options.DisplayPageCountAndCurrentLocation)
                listItemLinks.Add(PageCountAndLocationText(list, options.PageCountAndCurrentLocationFormat));

            //text
            if (options.DisplayItemSliceAndTotal)
                listItemLinks.Add(ItemSliceAndTotalText(list, options.ItemSliceAndTotalFormat));

            //page
            if (options.DisplayLinkToIndividualPages)
            {
                //calculate start and end of range of page numbers
                var start = 1;
                var end = list.PageCount;
                if (options.MaximumPageNumbersToDisplay.HasValue && list.PageCount > options.MaximumPageNumbersToDisplay)
                {
                    var maxPageNumbersToDisplay = options.MaximumPageNumbersToDisplay.Value;
                    start = list.PageNumber - maxPageNumbersToDisplay / 2;
                    if (start < 1)
                        start = 1;
                    end = maxPageNumbersToDisplay;
                    if ((start + end - 1) > list.PageCount)
                        start = list.PageCount - maxPageNumbersToDisplay + 1;
                }

                //if there are previous page numbers not displayed, show an ellipsis
                if (options.DisplayEllipsesWhenNotShowingAllPageNumbers && start > 1)
                    listItemLinks.Add(Ellipses(options.EllipsesFormat));

                foreach (var i in Enumerable.Range(start, end))
                {
                    //show delimiter between page numbers
                    if (i > start && !String.IsNullOrWhiteSpace(options.DelimiterBetweenPageNumbers))
                        listItemLinks.Add(WrapInListItem(options.DelimiterBetweenPageNumbers));

                    //show page number link
                    listItemLinks.Add(options.FunctionToDisplayEachPageNumber == null
                                             ? Page(i, list, generatePageUrl, options.LinkToIndividualPageFormat)
                                             : Page(i, list, generatePageUrl, options.FunctionToDisplayEachPageNumber));
                }

                //if there are subsequent page numbers not displayed, show an ellipsis
                if (options.DisplayEllipsesWhenNotShowingAllPageNumbers && (start + end - 1) < list.PageCount)
                    listItemLinks.Add(Ellipses(options.EllipsesFormat));
            }

            //next
            if (options.DisplayLinkToNextPage)
                listItemLinks.Add(Next(list, generatePageUrl, options.LinkToNextPageFormat));

            //last
            if (options.DisplayLinkToLastPage)
                listItemLinks.Add(Last(list, generatePageUrl, options.LinkToLastPageFormat));

            //append class to first item in list?
            if (!String.IsNullOrWhiteSpace(options.ClassToApplyToFirstListItemInPager))
                listItemLinks.First().AddCssClass(options.ClassToApplyToFirstListItemInPager);

            //append class to last item in list?
            if (!String.IsNullOrWhiteSpace(options.ClassToApplyToLastListItemInPager))
                listItemLinks.Last().AddCssClass(options.ClassToApplyToLastListItemInPager);

            //append classes to all list item links
            foreach(var li in listItemLinks)
                foreach (var c in options.LiElementClasses ?? Enumerable.Empty<string>())
                    li.AddCssClass(c);

            //collapse all of the list items into one big string
            var listItemLinksString = listItemLinks.Aggregate(
                new StringBuilder(),
                (sb, listItem) => sb.Append(listItem.ToString()),
                sb=> sb.ToString()
                );

            var ul = new TagBuilder("ul")
                        {
                            InnerHtml = listItemLinksString
                        };
            foreach (var c in options.UlElementClasses ?? Enumerable.Empty<string>())
                ul.AddCssClass(c);

            var outerDiv = new TagBuilder("div");
            foreach(var c in options.ContainerDivClasses ?? Enumerable.Empty<string>())
                outerDiv.AddCssClass(c);
            outerDiv.InnerHtml = ul.ToString();

            return new MvcHtmlString(outerDiv.ToString());
        }