Pergunta

Eu sei que o sistema dotnetkicks.com é open source para que eu possa ver o código de mim mesmo, mas eu posso 't fazer sentido de como eles fizeram a sua paginação. É difícil explicar, mas se você Goto dotnetkicks.com você pode jogar com a paginação em sua primeira página.

O que estou especificamente interessa é como eles mostram as primeiras páginas, então "..." e, em seguida, as últimas páginas.

Ela começa como este

Prev 1 2 3 4 5 6 ... 355 356 Seguinte

Então, se você acertar página 10 ele muda para este

Anterior 1 2 ... 6 7 8 9 10 11 12 13 14 ... 355 356 Próximo

É de longe o meu sistema de paginação favorito, então eu gostaria de fazer a mesma coisa no meu site

Foi útil?

Solução

O controlar a paginação no projeto é bastante simples, se você já escreveu um controle de paginação. Acho que o que pode ser confuso você é o uso de urlrewriting.net para a página / n formato / url.

Outras dicas

Eu escrevi um tal controle e levou algum código ... há muitas decisões a serem tomadas.

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; } }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top