2010-02-26 1 views
0

Я использую метод разбивки на страницы для отображения результатов поиска, возвращенных из моей базы данных. Я создаю 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, параметр поиска все еще присутствует.

+1

проверить этот вопрос/ответ: http://stackoverflow.com/questions/1663616/paging-search-results-with-asp-net-mvc/1664269#1664269 – Omar

+0

Кэширование что-то я бы как делать, но у меня есть проблема. Для того, чтобы кешировать работу, мне нужно было бы создать уникальный ключ для каждой searchString, и это нормально, пока я не получу часть HasNextPage моего представления, которая создает actionlink. Поскольку actionlink необходимо передать параметр searchString, я собирался использовать ключ, который был найден для ссылок. Как я могу получить этот ключ? – Darcy

ответ

0

То, что я в конечном итоге делает был, добавив параметр в моем классе 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); 
} 
0

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