2010-02-26 5 views
0

J'utilise une méthode de pagination pour afficher les résultats de recherche renvoyés par ma base de données. Je crée un Html.ActionLink pour chaque page supplémentaire, et ce que je me demande, c'est comment mettre la chaîne qui a été recherchée dans ActionLink? Ci-dessous une partie de ma vue partielle que je remplis un div avec. Il vient après les résultats afin que l'utilisateur puisse sélectionner une autre page de résultats.Comment conserver le terme de recherche pour des pages supplémentaires lors de la pagination

  <% 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 ressemble:

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); 
    } 

Il y a une zone de texte et le bouton. L'utilisateur tape la recherche et appuie sur le bouton qui déclenche un javascript qui récupère le texte de la zone de texte et l'envoie à SearchResults en conséquence.

Je veux garder ce qu'ils ont cherché alors quand je construis mes ActionLinks, le paramètre de recherche est toujours présent.

+1

Vérifiez cette question/réponse: http://stackoverflow.com/questions/1663616/paging-search-results-with-asp-net-mvc/1664269#1664269 – Omar

+0

est quelque chose que je Caching serait aime faire, mais j'ai un problème. Pour que la mise en cache fonctionne, je devrais créer une clé unique pour chaque objet searchString, ce qui me permet d'accéder à la partie HasNextPage de ma vue, ce qui crée le lien d'action. Puisque l'actionlink a besoin du paramètre searchString pour passer, j'allais utiliser la clé recherchée pour les liens. COMMENT puis-je obtenir cette clé? – Darcy

Répondre

0

Ce que je fini par faire a été, en ajoutant un paramètre à ma classe de PaginatedList qui contient la chaîne de recherche, puis je crée mon searchString dans le ActionResult au model.seachString, comme ceci:

 <% 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" })%> 
      <% } %> 
     <% } %> 

et mon contrôleur ressemble

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

Vous pouvez placer les liens du pager dans le même formulaire contenant le champ de recherche et les remplacer par des boutons de soumission ou d'image.

Questions connexes