ASP.NET Подкачка по страницам MVC с сохранением текущих параметров запроса

StackOverflow https://stackoverflow.com/questions/1430595

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня есть сетка с контактной информацией, которую мне нужно иметь возможность просматривать по страницам.

Вся сантехника уже на месте, с одной последней деталью.Подкачка осуществляется с помощью простого параметра p Querystring, напримерwww.myurl.com/grid?p=3 это была бы третья страница;репозиторий автоматически извлекает нужные данные, а также общее количество элементов.Размер каждой страницы определяется где-то в другом месте, и мне не нужно беспокоиться об этом в строке запроса.

Тем не менее, я поддерживаю поиск и т.д.также.Поисковый запрос, который искался в, обозначается как q в моей строке запроса.Так что теперь у меня может быть комбинация:www.myurl.com/grid?q=tom&p=2 который ищет "tom" и выводит вторую страницу результатов.

Проблема, с которой я сталкиваюсь сейчас, поскольку q (или другие) параметры мочь присутствовать в строке запроса, как мне создать пейджер для этого (который должен был бы держать исходные параметры, поэтому, если я нажму на "страницу 2", это должно перейти с

  • www.myurl.com/grid?a=1&b=xyz&q=tom

    Для

  • www.myurl.com/grid?a=1&b=xyz&q=tom&p=2

Как я могу это сделать?

Это было полезно?

Решение

Вчера я задавал аналогичный вопрос.Может быть, вы хотите проверить Сохранение данных в .net mvc

ниже приведен код, скопированный из книги Стива Сандерсона книга

public static class PagingHelpers
{
    public static string PageLinks(this HtmlHelper html, int currentPage,
    int totalPages, Func<int, string> pageUrl)
    {
        StringBuilder result = new StringBuilder();
        for (int i = 1; i <= totalPages; i++)
        {
            TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag

            tag.MergeAttribute("href", pageUrl(i));
            tag.InnerHtml = i.ToString();
            if (i == currentPage)
                tag.AddCssClass("selected");


            result.AppendLine(tag.ToString());
        }
        return result.ToString();
    }
}

Другие советы

Таким образом, вам нужно, чтобы ссылки на ваши страницы направляли пользователя на тот же URL, но с другим значением "страница".Наиболее очевидный способ сделать это - заставить ваш код, который отображает ссылку на страницу, захватить строку запроса из текущего запроса, изменить значение "страница" и отобразить ссылку, используя измененную строку.

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

Пример, включающий значения сортировки и разбиения на страницы, может выглядеть примерно так:

routes.MapRoute(
    "List",
    "{controller}/List/{pageNumber}/{sortBy}/{sortOrder}/{pageSize}",
    new { action = "List", sortBy = "Id", sortOrder = "Asc", pageNumber = 1, pageSize = 10 },
    new { sortBy = @"[A-Za-z0-9+-]*", sortOrder = "Asc|Desc", pageNumber = @"\d{1,6}", pageSize = @"\d{1,6}" });

Очевидно, что ваш метод действия "Список" должен быть способен интерпретировать значения и соответствующим образом обрабатывать данные.Возможно, это не то, что вы на самом деле ищете, но я просто подумал, что выкину это там.

В СТОРОНУ:Я также написал атрибут фильтра действия [List], который выбирает эти значения из маршрута и (если модель является коллекцией) автоматически применяет сортировку и подкачку в OnActionExecuted.Таким образом, все, что нужно сделать моему действию, это извлечь данные и установить модель.

Я сохраняю значения поиска для каждой формы в сеансе.В методах, которые реагируют на поиск или подкачку страниц, я сначала загружаю любые значения из сеанса, затем переопределяю их (и при необходимости устанавливаю значения сеанса) значениями из параметров querystring или form, в зависимости от того, является ли это get или post .Таким образом, мне не нужно беспокоиться о коде подкачки, включая критерии поиска - он просто использует то, что уже сохранено.Если я хочу выполнить новый поиск, то значения в полях поиска изменяются, и поиск выполняется с помощью кнопки фильтра, которая начинается с результатов со страницы 1.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top