博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC学习以及研究
阅读量:6648 次
发布时间:2019-06-25

本文共 10996 字,大约阅读时间需要 36 分钟。

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

25M PDF 507页 进入下载  点击

 

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
: IPagedList, IList
{
}
}
PagedList.cs
 
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace MvcPaging
{
public class PagedList
: List
, IPagedList
{
public PagedList(IEnumerable
source, int index, int pageSize, int? totalCount = null)
: this(source.AsQueryable(), index, pageSize, totalCount)
{
}
 
public PagedList(IQueryable
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
().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("<", currentPage - 1) : "<");
 
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("{0}", 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(">", (currentPage + 1)) : ">");
 
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("
 
if (ajaxOptions != null)
foreach (var ajaxOption in ajaxOptions.ToUnobtrusiveHtmlAttributes())
stringBuilder.AppendFormat(" {0}=\"{1}\"", ajaxOption.Key, ajaxOption.Value);
 
stringBuilder.AppendFormat(" href=\"{0}\">{1}", 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
extensions
 
public static IPagedList
ToPagedList
(this IQueryable
source, int pageIndex, int pageSize, int? totalCount = null)
{
return new PagedList
(source, pageIndex, pageSize, totalCount);
}
 
#endregion
 
#region IEnumerable
extensions
 
public static IPagedList
ToPagedList
(this IEnumerable
source, int pageIndex, int pageSize, int? totalCount = null)
{
return new PagedList
(source, pageIndex, pageSize, totalCount);
}
 
#endregion
}
}

转载于:https://www.cnblogs.com/zengxiangzhan/archive/2012/03/30/2426109.html

你可能感兴趣的文章
MySQL之权限管理
查看>>
puppet yum仓库
查看>>
修改Tomcat编码方式的两种方法
查看>>
转: requirejs压缩打包r.js使用示例 2 (~~很详细的教程)
查看>>
usb host和usb device
查看>>
kickstrt脚本for cobbler基于system-config-kickstart配置
查看>>
【Linux】双向重导向命令tee
查看>>
git 修改历史提交信息
查看>>
PHP修改图片
查看>>
ActionBar自己定义改动无效解决方法
查看>>
设计模式总结篇系列:外观模式(Facade)
查看>>
多谋而少决
查看>>
省市区级联选择
查看>>
Hyper-V虚机跨NUMA节点性能影响
查看>>
spring配置,spring中的bean 的id不能相同
查看>>
Swift语言指南(七)--语言基础之布尔值和类型别名
查看>>
与机房收费系统重相见
查看>>
Spark核心概念
查看>>
百度究竟是哪国的公司
查看>>
netstat命令
查看>>