zoukankan      html  css  js  c++  java
  • MVC学习以及研究

    ASP.NET.MVC4 高级编程学习资料

    25M PDF 507页 进入下载  点击Professional.ASP.NET.MVC

    andrewdavey-NotFoundMvc  链接

    martijnboland-MvcPaging  链接

    曾祥展 mvcPaging


    IPagedList.cs

    using System.Collections.Generic;
    namespace MvcPaging
    {
      public interface IPagedList
      {
        int PageCount { get; }
        int TotalItemCount { get; }
        int PageIndex { get; }
        int PageNumber { get; }
        int PageSize { get; }
        bool HasPreviousPage { get; }
        bool HasNextPage { get; }
        bool IsFirstPage { get; }
        bool IsLastPage { get; }
        int ItemStart { get; }
        int ItemEnd { get; }    
      }
      public interface IPagedList<T> : IPagedList, IList<T>
      {
      }
    }

    PagedList.cs
    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    namespace MvcPaging
    
    {
    
        public class PagedList<T> : List<T>, IPagedList<T>
    
        {
    
            public PagedList(IEnumerable<T> source, int index, int pageSize, int? totalCount = null)
    
                : this(source.AsQueryable(), index, pageSize, totalCount)
    
            {
    
            }
    
            public PagedList(IQueryable<T> source, int index, int pageSize, int? totalCount = null)
    
            {
    
                if (index < 0)
    
                    throw new ArgumentOutOfRangeException("index", "Value can not be below 0.");
    
                if (pageSize < 1)
    
                    throw new ArgumentOutOfRangeException("pageSize", "Value can not be less than 1.");
    
                if (source == null)
    
                    source = new List<T>().AsQueryable();
    
                var realTotalCount = source.Count();
    
                PageSize = pageSize;
    
                PageIndex = index;
    
                TotalItemCount = totalCount.HasValue ? totalCount.Value : realTotalCount;
    
                PageCount = TotalItemCount > 0 ? (int)Math.Ceiling(TotalItemCount / (double)PageSize) : 0;
    
                HasPreviousPage = (PageIndex > 0);
    
                HasNextPage = (PageIndex < (PageCount - 1));
    
                IsFirstPage = (PageIndex <= 0);
    
                IsLastPage = (PageIndex >= (PageCount - 1));
    
                ItemStart = PageIndex * PageSize + 1;
    
                ItemEnd = Math.Min(PageIndex * PageSize + PageSize, TotalItemCount);
    
                if (TotalItemCount <= 0)
    
                    return;
    
                var realTotalPages = (int)Math.Ceiling(realTotalCount / (double)PageSize);
    
                if (realTotalCount < TotalItemCount && realTotalPages <= PageIndex)
    
                    AddRange(source.Skip((realTotalPages - 1) * PageSize).Take(PageSize));
    
                else
    
                    AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
    
            }
    
            #region IPagedList Members
    
            public int PageCount { get; private set; }
    
            public int TotalItemCount { get; private set; }
    
            public int PageIndex { get; private set; }
    
            public int PageNumber { get { return PageIndex + 1; } }
    
            public int PageSize { get; private set; }
    
            public bool HasPreviousPage { get; private set; }
    
            public bool HasNextPage { get; private set; }
    
            public bool IsFirstPage { get; private set; }
    
            public bool IsLastPage { get; private set; }
    
            public int ItemStart { get; private set; }
    
            public int ItemEnd { get; private set; }
    
            #endregion
    
        }
    
    }


    Pager.cs

    using System;
    
    using System.Text;
    
    using System.Web;
    
    using System.Web.Mvc;
    
    using System.Web.Mvc.Ajax;
    
    using System.Web.Routing;
    
    namespace MvcPaging
    
    {
    
        public class Pager
    
        {
    
            private ViewContext viewContext;
    
            private readonly int pageSize;
    
            private readonly int currentPage;
    
            private readonly int totalItemCount;
    
            private readonly RouteValueDictionary linkWithoutPageValuesDictionary;
    
            private readonly AjaxOptions ajaxOptions;
    
            public Pager(ViewContext viewContext, int pageSize, int currentPage, int totalItemCount, RouteValueDictionary valuesDictionary, AjaxOptions ajaxOptions)
    
            {
    
                this.viewContext = viewContext;
    
                this.pageSize = pageSize;
    
                this.currentPage = currentPage;
    
                this.totalItemCount = totalItemCount;
    
                this.linkWithoutPageValuesDictionary = valuesDictionary;
    
                this.ajaxOptions = ajaxOptions;
    
            }
    
            public HtmlString RenderHtml()
    
            {
    
                var pageCount = (int)Math.Ceiling(totalItemCount / (double)pageSize);
    
                const int nrOfPagesToDisplay = 10;
    
                var sb = new StringBuilder();
    
                // Previous
    
                sb.Append(currentPage > 1 ? GeneratePageLink("&lt;", currentPage - 1) : "<span class=\"disabled\">&lt;</span>");
    
                var start = 1;
    
                var end = pageCount;
    
                if (pageCount > nrOfPagesToDisplay)
    
                {
    
                    var middle = (int)Math.Ceiling(nrOfPagesToDisplay / 2d) - 1;
    
                    var below = (currentPage - middle);
    
                    var above = (currentPage + middle);
    
                    if (below < 4)
    
                    {
    
                        above = nrOfPagesToDisplay;
    
                        below = 1;
    
                    }
    
                    else if (above > (pageCount - 4))
    
                    {
    
                        above = pageCount;
    
                        below = (pageCount - nrOfPagesToDisplay + 1);
    
                    }
    
                    start = below;
    
                    end = above;
    
                }
    
                if (start > 1)
    
                {
    
                    sb.Append(GeneratePageLink("1", 1));
    
                    if (start > 3)
    
                    {
    
                        sb.Append(GeneratePageLink("2", 2));
    
                    }
    
                    if (start > 2)
    
                    {
    
                        sb.Append("...");
    
                    }
    
                }
    
                for (var i = start; i <= end; i++)
    
                {
    
                    if (i == currentPage || (currentPage <= 0 && i == 0))
    
                    {
    
                        sb.AppendFormat("<span class=\"current\">{0}</span>", i);
    
                    }
    
                    else
    
                    {
    
                        sb.Append(GeneratePageLink(i.ToString(), i));
    
                    }
    
                }
    
                if (end < pageCount)
    
                {
    
                    if (end < pageCount - 1)
    
                    {
    
                        sb.Append("...");
    
                    }
    
                    if (pageCount - 2 > end)
    
                    {
    
                        sb.Append(GeneratePageLink((pageCount - 1).ToString(), pageCount - 1));
    
                    }
    
                    sb.Append(GeneratePageLink(pageCount.ToString(), pageCount));
    
                }
    
                // Next
    
                sb.Append(currentPage < pageCount ? GeneratePageLink("&gt;", (currentPage + 1)) : "<span class=\"disabled\">&gt;</span>");
    
                return new HtmlString(sb.ToString());
    
            }
    
            private string GeneratePageLink(string linkText, int pageNumber)
    
            {
    
                var routeDataValues = viewContext.RequestContext.RouteData.Values;
    
                RouteValueDictionary pageLinkValueDictionary;
    
                // Avoid canonical errors when page count is equal to 1.
    
                if (pageNumber == 1)
    
                {
    
                    pageLinkValueDictionary = new RouteValueDictionary(this.linkWithoutPageValuesDictionary);
    
                    if (routeDataValues.ContainsKey("page"))
    
                    {
    
                        routeDataValues.Remove("page");
    
                    }
    
                }
    
                else
    
                {
    
                    pageLinkValueDictionary = new RouteValueDictionary(this.linkWithoutPageValuesDictionary) { { "page", pageNumber } };
    
                }
    
                // To be sure we get the right route, ensure the controller and action are specified.
    
                if (!pageLinkValueDictionary.ContainsKey("controller") && routeDataValues.ContainsKey("controller"))
    
                {
    
                    pageLinkValueDictionary.Add("controller", routeDataValues["controller"]);
    
                }
    
                if (!pageLinkValueDictionary.ContainsKey("action") && routeDataValues.ContainsKey("action"))
    
                {
    
                    pageLinkValueDictionary.Add("action", routeDataValues["action"]);
    
                }
    
                // 'Render' virtual path.
    
                var virtualPathForArea = RouteTable.Routes.GetVirtualPathForArea(viewContext.RequestContext, pageLinkValueDictionary);
    
                if (virtualPathForArea == null)
    
                    return null;
    
                var stringBuilder = new StringBuilder("<a");
    
                if (ajaxOptions != null)
    
                    foreach (var ajaxOption in ajaxOptions.ToUnobtrusiveHtmlAttributes())
    
                        stringBuilder.AppendFormat(" {0}=\"{1}\"", ajaxOption.Key, ajaxOption.Value);
    
                stringBuilder.AppendFormat(" href=\"{0}\">{1}</a>", virtualPathForArea.VirtualPath, linkText);
    
                return stringBuilder.ToString();
    
            }
    
        }
    
    }

    PagingExtensions.cs
    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Web;
    
    using System.Web.Mvc;
    
    using System.Web.Mvc.Ajax;
    
    using System.Web.Routing;
    
    namespace MvcPaging
    
    {
    
        public static class PagingExtensions
    
        {
    
            #region AjaxHelper extensions
    
            public static HtmlString Pager(this AjaxHelper ajaxHelper, int pageSize, int currentPage, int totalItemCount, AjaxOptions ajaxOptions)
    
            {
    
                return Pager(ajaxHelper, pageSize, currentPage, totalItemCount, null, null, ajaxOptions);
    
            }
    
            public static HtmlString Pager(this AjaxHelper ajaxHelper, int pageSize, int currentPage, int totalItemCount, string actionName, AjaxOptions ajaxOptions)
    
            {
    
                return Pager(ajaxHelper, pageSize, currentPage, totalItemCount, actionName, null, ajaxOptions);
    
            }
    
            public static HtmlString Pager(this AjaxHelper ajaxHelper, int pageSize, int currentPage, int totalItemCount, object values, AjaxOptions ajaxOptions)
    
            {
    
                return Pager(ajaxHelper, pageSize, currentPage, totalItemCount, null, new RouteValueDictionary(values), ajaxOptions);
    
            }
    
            public static HtmlString Pager(this AjaxHelper ajaxHelper, int pageSize, int currentPage, int totalItemCount, string actionName, object values, AjaxOptions ajaxOptions)
    
            {
    
                return Pager(ajaxHelper, pageSize, currentPage, totalItemCount, actionName, new RouteValueDictionary(values), ajaxOptions);
    
            }
    
            public static HtmlString Pager(this AjaxHelper ajaxHelper, int pageSize, int currentPage, int totalItemCount, RouteValueDictionary valuesDictionary, AjaxOptions ajaxOptions)
    
            {
    
                return Pager(ajaxHelper, pageSize, currentPage, totalItemCount, null, valuesDictionary, ajaxOptions);
    
            }
    
            public static HtmlString Pager(this AjaxHelper ajaxHelper, int pageSize, int currentPage, int totalItemCount, string actionName, RouteValueDictionary valuesDictionary, AjaxOptions ajaxOptions)
    
            {
    
                if (valuesDictionary == null)
    
                {
    
                    valuesDictionary = new RouteValueDictionary();
    
                }
    
                if (actionName != null)
    
                {
    
                    if (valuesDictionary.ContainsKey("action"))
    
                    {
    
                        throw new ArgumentException("The valuesDictionary already contains an action.", "actionName");
    
                    }
    
                    valuesDictionary.Add("action", actionName);
    
                }
    
                var pager = new Pager(ajaxHelper.ViewContext, pageSize, currentPage, totalItemCount, valuesDictionary, ajaxOptions);
    
                return pager.RenderHtml();
    
            }
    
            #endregion
    
            #region HtmlHelper extensions
    
            public static HtmlString Pager(this HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount)
    
            {
    
                return Pager(htmlHelper, pageSize, currentPage, totalItemCount, null, null);
    
            }
    
            public static HtmlString Pager(this HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount, string actionName)
    
            {
    
                return Pager(htmlHelper, pageSize, currentPage, totalItemCount, actionName, null);
    
            }
    
            public static HtmlString Pager(this HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount, object values)
    
            {
    
                return Pager(htmlHelper, pageSize, currentPage, totalItemCount, null, new RouteValueDictionary(values));
    
            }
    
            public static HtmlString Pager(this HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount, string actionName, object values)
    
            {
    
                return Pager(htmlHelper, pageSize, currentPage, totalItemCount, actionName, new RouteValueDictionary(values));
    
            }
    
            public static HtmlString Pager(this HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount, RouteValueDictionary valuesDictionary)
    
            {
    
                return Pager(htmlHelper, pageSize, currentPage, totalItemCount, null, valuesDictionary);
    
            }
    
            public static HtmlString Pager(this HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount, string actionName, RouteValueDictionary valuesDictionary)
    
            {
    
                if (valuesDictionary == null)
    
                {
    
                    valuesDictionary = new RouteValueDictionary();
    
                }
    
                if (actionName != null)
    
                {
    
                    if (valuesDictionary.ContainsKey("action"))
    
                    {
    
                        throw new ArgumentException("The valuesDictionary already contains an action.", "actionName");
    
                    }
    
                    valuesDictionary.Add("action", actionName);
    
                }
    
                var pager = new Pager(htmlHelper.ViewContext, pageSize, currentPage, totalItemCount, valuesDictionary, null);
    
                return pager.RenderHtml();
    
            }
    
            #endregion
    
            #region IQueryable<T> extensions
    
            public static IPagedList<T> ToPagedList<T>(this IQueryable<T> source, int pageIndex, int pageSize, int? totalCount = null)
    
            {
    
                return new PagedList<T>(source, pageIndex, pageSize, totalCount);
    
            }
    
            #endregion
    
            #region IEnumerable<T> extensions
    
            public static IPagedList<T> ToPagedList<T>(this IEnumerable<T> source, int pageIndex, int pageSize, int? totalCount = null)
    
            {
    
                return new PagedList<T>(source, pageIndex, pageSize, totalCount);
    
            }
    
            #endregion
    
        }
    
    }
  • 相关阅读:
    ASP.NET Core 个人新闻项目
    C# 检查字符串中是否有HTML标签、返回过滤掉所有的HTML标签后的字符串
    VueCLI 页面加载进度条效果
    replace() 方法使用
    CentOS 7.9安装教程
    在Windows中安装MySQL
    linux安装consul
    jenkins Skywalking安装部署文档总结
    CentOS 7.x安装.NET运行时
    Apollo部署文档
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/2426109.html
Copyright © 2011-2022 走看看