ASP.NET MVC Paging, сохранение текущих параметров запроса - PullRequest
3 голосов
/ 16 сентября 2009

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

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

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

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

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

    до

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

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

Ответы [ 3 ]

1 голос
/ 16 сентября 2009

Я задал похожий вопрос вчера. Может быть, вы хотите проверить Сохранить данные в .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();
    }
}
0 голосов
/ 16 сентября 2009

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

0 голосов
/ 16 сентября 2009

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

В качестве альтернативы, и этот подход я выбрал, вы можете определить новый маршрут для ваших страниц «списка», который включает любые значения подкачки и сортировки. Таким образом, они являются частью 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}" });

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

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

...