using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace Infrastructure.Application { public class PagedList : IPagedList, IValidatableObject { public PagedList() { PageNumber = 1; PageSize = this.DefaultPageSize; } [ScaffoldColumn(false)] public int DefaultPageSize { get; set; } = 20; [ScaffoldColumn(false)] public int PageNumber { get; set; } [ScaffoldColumn(false)] public int PageSize { get; set; } [ScaffoldColumn(false)] public int TotalRow { get; set; } public int[] GetPageSizes() { return new int[] { 20, 50, 100 }; } public int PageCount() { return (int)Math.Ceiling(this.TotalRow / (double)this.PageSize); } public bool HasPrev() { return PageNumber > 1; } public bool HasNext() { return PageNumber < PageCount(); } public IEnumerable GetPageIndexs() { var pageCount = PageCount(); var maxLinks = 10; var left = maxLinks / 2; var start = PageNumber - left; start = start > 1 ? start : 1; var end = PageNumber + (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 (PageNumber < 1) { yield return new ValidationResult("当前页索引必须大于等于1"); } if (PageSize > 1000) { yield return new ValidationResult("分页数量超出系统限制"); } } [ScaffoldColumn(false)] public List List { get; } = new List(); } }