using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace Infrastructure.Application { public class PagedList : IPagedList, IValidatableObject { [ScaffoldColumn(false)] public int DefaultPageSize { get; set; } = 20; [ScaffoldColumn(false)] public int[] PageSizeCollection { get; set; } = new int[] { 20, 50, 100 }; public PagedList() { PageIndex = 1; PageSize = this.DefaultPageSize; } [ScaffoldColumn(false)] public int PageIndex { get; set; } [ScaffoldColumn(false)] public int PageSize { get; set; } [ScaffoldColumn(false)] public int TotalCount { get; set; } public int PageCount() { return (int)Math.Ceiling(this.TotalCount / (double)this.PageSize); } public bool HasPrev() { return PageIndex > 1; } public bool HasNext() { return PageIndex < PageCount(); } public IEnumerable GetPageIndexs() { var pageCount = PageCount(); var maxLinks = 10; var left = maxLinks / 2; var start = PageIndex - left; start = start > 1 ? start : 1; var end = PageIndex + (maxLinks - left - 1); end = end > pageCount ? pageCount : end; if (start == 1 && end < pageCount) { while (end - start + 1 < maxLinks && end < pageCount) { end++; } } if (end == pageCount && start > 1) { while (end - start + 1 < maxLinks && start > 1) { start--; } } var list = new List(); for (int i = start; i <= end; i++) { list.Add(i); } return list; } public IEnumerable Validate(ValidationContext validationContext) { if (PageSize > 1000) { yield return new ValidationResult("分页数量超出系统限制"); } } [ScaffoldColumn(false)] public List List { get; set; } = new List(); } }