2009-07-30 7 views
0

J'utilise l'exemple martijn Boland's à la page.Comment faire la pagination et le filtrage dans les applications MVC

L'URL de mes changements d'applications lorsque je clique sur les numéros de page:

http://localhost:1202/Issue?page=6 

Jusqu'à présent, si bon. Le problème est lorsque j'ajoute une liste déroulante qui soumet sur le changement, je ne peux pas page aussi bien que filtrer. Si je change ma liste déroulante, je devrais passer le projectId dans le querysting, ma vue de partail actualisera et montrera mes recored filtrés.
Maintenant, quand je page le paramètre de filtre ne colle pas dans la chaîne de requête ainsi que la sélection dans mon menu déroulant ne colle pas.

Comment puis-je paginer et filtrer?

Index.aspx

<form id="form-post-project-selection" class="post-comments" method="get"> 
<label for="Country">Project:</label> 
<%= Html.DropDownList("ProjectList", "--All--") %> 
</form> 

<% Html.RenderPartial("MyIssues", Model); %> 

<script type="text/javascript"> 
     $("#form-post-project-selection").submit(function(evt) { 
     var frm = $("#form-post-project-selection"); 
     var action = frm.attr("action"); 
     var serializedForm = frm.serialize(); 
     var projectId = jQuery.trim($("ProjectList").val()); 
     if (projectId.length < 1 || projectId == "-1") 
      return; 
    }); 
    $("#ProjectList").change(function() { 
     $("#form-post-project-selection").submit(); 
    }); 
</script> 

Répondre

1

Je pense que vous avez deux options ici. Le premier serait d'utiliser Ajax pour rappeler à un contrôleur de récupérer une collection d'objets "paginée" de sorte que chaque fois que vous filtrez la sortie, vous publiez l'identifiant du filtre pour obtenir uniquement les collections de résultats dont vous avez besoin pour la page tu veux. Vous pouvez faire la pagination avec Ajax ainsi que renvoyer l'ID de filtre avec l'appel Ajax de sorte que vous récupériez l'objet filtré et paginé ou que vous puissiez rediriger vers une URL différente sur la pagination expliquée ci-dessous.

Si vous utilisez la publication en pleine page sur le serveur en modifiant la valeur dans la liste déroulante, vous pouvez rediriger l'utilisateur vers une autre URL avec l'identificateur de filtre, par exemple. Problème/Filtre/1

De cette façon, chaque fois que les liens de pagination sont utilisés, vous obtiendrez une URL comme Issue/Filter/1? Page = 6 et vous ne perdrez pas votre filtre.

Veuillez noter que la vue de la page n'a pas besoin de varier.

Bien que la fonction se retrouve la même, la réponse à cette question est dans les commentaires ci-dessous et affichée ici pour plus de facilité.

<%= Html.Pager(ViewData.Model.PageSize, ViewData.Model.PageNumber, ViewData.Model.TotalItemCount, new { categoryname = ViewData["CategoryDisplayName"] })%> 
+0

L'exemple dans le projet de Martijn ne postez pas de retour lors du déplacement vers une autre page, mais a plutôt des liens comme: 23 Picflight

+1

OK donc lors de la création de vos liens pour la pagination assurez-vous d'ajouter le projectId au lien ainsi comme le numéro de page. Dans le lien que vous avez collé la solution est sous la rubrique scénarios avancés à vos pages ajouter les valeurs de routage supplémentaires dont vous avez besoin, par exemple. <% = Html.Pager (ViewData.Model.PageSize, ViewData.Model.PageNumber, ViewData.Model.TotalItemCount, nouveau {categoryname = ViewData ["CategoryDisplayName"]})%> – Webmonger

+0

+1 Merci d'avoir signalé les scénarios avancés. – Picflight

Questions connexes