문제

나는 알고있다 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; } }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top