Как сохранить поисковый запрос для дополнительных страниц при разбивке на страницы

Я использую метод разбивки на страницы для отображения результатов поиска, возвращаемых из моей базы данных. Я создаю Html.ActionLink для каждой дополнительной страницы, и мне интересно, как поместить строку, которая была найдена в ActionLink? Ниже приведена часть моего частичного представления, которым я заполняю div. Он идет после результатов, поэтому пользователь может выбрать другую страницу результатов.

            <% if (Model.HasNextPage)
               {  %>                
                 <% for (var i = 1; i < Model.TotalPages; i++)
                    { %>
                        <%= Html.ActionLink(i.ToString(), "MyPartialPage", "MyController", new { searchString = Cache[searchString], page = i }, new { @id = "SearchResults" })%>
                 <% } %>
            <% } %>

MyController выглядит так:

    public ActionResult SearchResults(string searchString, int? page)
    {
        var theResults = driverRepository.GetResults();

        var searchResults = drivers.Where(q => q.Filename.Contains(searchString));

        var paginatedDrivers = new PaginatedList<Driver>(searchResults, page ?? 0, pageSize);

        return View("SearchResults", paginatedDrivers);   
    }

Есть текстовое поле и кнопка. Пользователь вводит поиск и нажимает кнопку, которая запускает некоторый javascript, который получает текст из текстового поля и соответственно отправляет в SearchResults.

Я хочу сохранить то, что они искали, поэтому, когда я создаю свои ActionLinks, параметр поиска все еще присутствует.


person Darcy    schedule 26.02.2010    source источник
comment
Ознакомьтесь с этим вопросом / ответом: stackoverflow.com/questions/1663616/   -  person Omar    schedule 26.02.2010
comment
Кеширование - это то, чем я хотел бы заняться, но у меня есть проблема. Чтобы кеширование работало, мне нужно было бы создать уникальный ключ для каждой searchString, и это нормально, пока я не доберусь до части HasNextPage моего представления, которая создает ссылку действия. Поскольку для actionlink требуется параметр searchString, я собирался использовать ключ, который искали для ссылок. Как мне получить этот ключ?   -  person Darcy    schedule 26.02.2010


Ответы (2)


Вы можете поместить ссылки на пейджер в ту же форму, которая содержит поле поиска, и заменить их кнопками отправки или изображения.

person Darin Dimitrov    schedule 26.02.2010

В итоге я добавил параметр к моему классу PaginatedList, который содержит строку поиска, а затем установил для моего searchString в actionresult значение model.seachString, например:

        <% if (Model.HasNextPage)
           {  %>                
             <% for (var i = 1; i < Model.TotalPages; i++)
                { %>
                    <%= Html.ActionLink(i.ToString(), "MyPartialPage", "MyController", new { searchString = this.Model.SearchString, page = i }, new { @id = "SearchResults" })%>
             <% } %>
        <% } %>

и мой контроллер выглядит как

public ActionResult SearchResults(string searchString, int? page)
{
    var theResults = driverRepository.GetResults();

    var searchResults = drivers.Where(q => q.Filename.Contains(searchString));

    var paginatedDrivers = new PaginatedList<Driver>(searchString, searchResults, page ?? 0, pageSize);

    return View("SearchResults", paginatedDrivers);   
}
person Darcy    schedule 26.02.2010