2010-04-23 6 views
3

J'ai une page qui prend un certain nombre de paramètres sur un formulaire et les enregistre dans une action. Il renvoie un certain nombre de résultats de recherche qui doivent être parcourus. Mon pager utilise ActionLink; Les résultats reviennent comme prévu mais quand je clique sur la page deux il va à l'Action par défaut, pas à celle marquée avec la publication. Les valeurs de formulaire ne sont plus soumises et les résultats affichés pour la page deux sont les résultats par défaut et non les filtres avec les paramètres.Problème de pagination avec post-action dans ASP.NET MVC

Je ne sais pas comment résoudre ce problème? Une façon était de sauvegarder les valeurs de formulaire dans la base de données sur le poste et de les relire sur l'action par défaut, mais il semble trop.

Merci!

Répondre

2

La grille et le pager MVCContrib traitent ce scénario spécifique. Vous pouvez écrire le vôtre, mais je recommanderais les aides de l'interface utilisateur de la grille et du pager.

http://mvccontrib.codeplex.com/

http://mvccontrib.codeplex.com/sourcecontrol/network/Show?projectName=MVCContrib&changeSetId=4112aa6f6d84#src%2fMVCContrib%2fUI%2fPager%2fPager.cs

private string CreateQueryString(NameValueCollection values) 
     { 
      var builder = new StringBuilder(); 

      foreach(string key in values.Keys) 
      { 
       if(key == _pageQueryName) 
        //Don't re-add any existing 'page' variable to the querystring - this will be handled in CreatePageLink. 
       { 
        continue; 
       } 

       foreach(var value in values.GetValues(key)) 
       { 
        builder.AppendFormat("&{0}={1}", key, HttpUtility.HtmlEncode(value)); 
       } 
      } 

      return builder.ToString(); 
     } 
1

je suis tombé sur le même scénario. Et je choisis de faire de la pagination avec des posts de formulaire ajax lorsque l'utilisateur clique sur le lien 'précédent' ou 'suivant'.

Après la fonction javascript fait cela.

function searchResultsPage(pageNum) 

{

$("#searchResultPageNum").val(pageNum); 

var frm = $("form#ajaxSearch"); 
$.post(frm.attr('action'), 
     frm.serialize(), 
     function(rData) { 
      $("#rvwLstFrmContainer").html(rData); 
     }); 

}

Où searchResultPageNum 'est un champ caché pour refléter le nouveau numéro de page à charger. 'AjaxSearch' est un identifiant de forme ajax, rendu en utilisant l'aide HTML pour AjaxForm. 'RvwLstFrmContainer' est la div qui contient les résultats

Communauté! Désolé, à propos du code mal formaté. Impossible de le poster correctement