Управление пейджингом ASP.NET

Я ищу достойный пейджинговый контроль в ASP.NET, как и пейджер Stackoverflow. Может кто-нибудь порекомендовать?

Я бы предпочел тот, который не использовал Postback, просто настраиваемый запрос.

Ответы

Ответ 1

Я ожидал больше ответов, но похоже, что многие люди просто делают свои собственные. Я нашел достойный, который поддерживается довольно часто на codeproject.com

cp

Это не совсем то же самое, что и stackoverflow.com. Было бы неплохо, если бы был приличный контроль с открытым исходным кодом, в котором было множество различных параметров вывода.

Ответ 2

Очень легко сворачивать самостоятельно. Я создал простой пользовательский элемент управления на основе пейджера с двумя свойствами...

  • Общее количество доступных страниц в соответствии с базовыми данными
  • Количество ссылок для отображения

Выбранная страница определяется путем чтения строки запроса. Самая большая проблема заключалась в изменении URL-адреса с новым номером страницы. Этот метод использует параметр строки запроса "p", чтобы указать, какую страницу отображать...

string getLink(int toPage)
{
    NameValueCollection query = HttpUtility.ParseQueryString(Request.Url.Query);
    query["p"] = toPage.ToString();

    string url = Request.Path;

    for(int i = 0; i < query.Count; i++)
    {
        url += string.Format("{0}{1}={2}", 
            i == 0 ? "?" : "&", 
            query.Keys[i], 
            string.Join(",", query.GetValues(i)));
    }

    return url;
}

Простая формула для определения диапазона номеров страниц для отображения...

int min = Math.Min(Math.Max(0, Selected - (PageLinksToShow / 2)), Math.Max(0, PageCount - PageLinksToShow + 1));
int max = Math.Min(PageCount, min + PageLinksToShow);

Каждая ссылка затем генерируется с использованием чего-то вроде (где min и max определяют диапазон ссылок страниц для создания)...

for (int i = min; i <= max; i++)
{
    HyperLink btn = new HyperLink();
    btn.Text = (i + 1).ToString();
    btn.NavigateUrl = getLink(i);
    btn.CssClass = "pageNumbers" + (Selected == i ? " current" : string.Empty);
    this.Controls.Add(btn);
}

Можно также создать кнопки "Предыдущая" (и "Далее" ).

HyperLink previous = new HyperLink();
previous.Text = "Previous";
previous.NavigateUrl = getLink(Selected - 1);

Первая и последняя кнопки прямолинейны...

HyperLink previous = new HyperLink();
previous.Text = "1";
first.NavigateUrl = getLink(0);

При определении того, когда следует показывать "...", покажите литеральный элемент управления, если диапазон ссылок не находится рядом с первой или последней страницей...

if (min > 0)
{
    Literal spacer = new Literal();
    spacer.Text = "&hellip;";
    this.Controls.Add(spacer);
}

Сделайте то же самое для выше для "max < PageCount".

Весь этот код помещается в метод переопределения CreateChildControls.

Ответ 3

Я работал с элементами управления DevExpress и Telerik и предпочитал пейджер DevExpress. Я не уверен, что пейджер DevExpress может работать напрямую с помощью querystring, но я был бы удивлен, если бы он не был таким гибким. Что касается пейджинга между существующими страницами после загрузки, все может находиться на клиенте или, если требуется поездка на сервер, элемент управления полностью оснащен AJAX. Я предлагаю вам начать поиск по адресу www.devexpress.com, а затем проверить также www.Telerik.com(который также оснащен AJAX).

Ответ 6

Вы можете попробовать NPager. Использует строку запроса для индексов страниц, без обратной передачи. Нужен Bootstrap для стилизации, однако у вас могут быть собственные пользовательские классы css для элемента управления с использованием класса CSS "pagination". Здесь работает DEMO

введите описание изображения здесь