dotnetkicks.com은 ASP.NET 페이징을 어떻게 구현 했습니까?
-
22-07-2019 - |
문제
나는 알고있다 dotnetKicks.com 시스템은 오픈 소스이므로 코드를 직접 볼 수 있지만 페이징을 어떻게했는지 이해할 수 없습니다. 설명하기는 어렵지만 얻었다면 dotnetKicks.com 첫 페이지에서 페이징을 가지고 놀 수 있습니다.
내가 구체적으로 관심이있는 것은 그들이 처음 몇 페이지를 보여준 다음 "..."및 마지막 몇 페이지를 보여주는 방법입니다.
이렇게 시작됩니다
이전 1 2 3 4 5 6 ... 355 356 다음에
그런 다음 10 페이지를 누르면 이로 변경됩니다.
Prev 1 2 ... 6 7 8 9 10 11 12 13 14 ... 355 356 다음
그것은 내가 가장 좋아하는 페이징 시스템이므로 내 웹 사이트에서 똑같은 일을하고 싶습니다.
해결책
그만큼 Pagination Control 당신이 페이징 컨트롤을 작성한 적이 있다면 프로젝트에서는 상당히 간단합니다. 당신을 혼란스럽게 할 수있는 것은 urlrewriTing.net /page /n url 형식의 경우.
다른 팁
나는 그런 통제를 작성했고 코드가 필요했습니다 ... 많은 결정이 있습니다.
public class SimplePagerLinkGenerator : IPagerLinkGenerator
{
private PagingDisplaySettings _displaySettings;
public SimplePagerLinkGenerator(PagingDisplaySettings displaySettings)
{
this._displaySettings = displaySettings;
}
public PageLinkData[] GetPagesLinkData(uint crtPageIndex, uint pageCount, ushort pageSize,
string urlLinkTemplate)
{
int i, crtPage = (int)crtPageIndex, pageCnt = (int)pageCount,
pgInnerCnt = (int)this._displaySettings.PagesBeforeOrAfterCurrent,
pgEndCnt = (int)this._displaySettings.PagesShownAtEndingsCount;
int innerBlockStart = crtPage - pgInnerCnt;
int innerBlockEnd = crtPage + pgInnerCnt;
int innerBlockStartNormalized = innerBlockStart < 1 ? 1 : innerBlockStart;
int innerBlockEndNormalized = innerBlockEnd > pageCount ? pageCnt : innerBlockEnd;
List<PageLinkData> result = new List<PageLinkData>(2 * pgEndCnt + 3 + 2 * pgInnerCnt);
for (i = 1; i <= pgEndCnt && i <= pageCount; i++)
result.Add(new PageLinkData(i, i == crtPage, urlLinkTemplate, pageSize));
if (i > pageCount)
return result.ToArray();
if (innerBlockStart > pgEndCnt + 1)
{
result.Add(PageLinkData.Ellipsis);
for (i = innerBlockStart; i <= innerBlockEndNormalized; i++)
result.Add(new PageLinkData(i, i == crtPage, urlLinkTemplate, pageSize));
}
else
for (i = pgEndCnt + 1; i <= innerBlockEndNormalized; i++)
result.Add(new PageLinkData(i, i == crtPage, urlLinkTemplate, pageSize));
if (innerBlockEnd < pageCount - pgInnerCnt)
{
result.Add(PageLinkData.Ellipsis);
for (i = pageCnt - pgInnerCnt + 1; i <= pageCount; i++)
result.Add(new PageLinkData(i, i == crtPage, urlLinkTemplate, pageSize));
}
else
for (; i <= pageCount; i++)
result.Add(new PageLinkData(i, i == crtPage, urlLinkTemplate, pageSize));
return result.ToArray();
}
public PagingDisplaySettings DisplaySettings { get { return this._displaySettings; } }
}
제휴하지 않습니다 StackOverflow