2008-12-15 4 views
1

Je forme dans ma page un get et un poste et je veux ajouter téléavertisseur ma forme get .. donc je ne peux pas la page par les résultats ..ASP.NET MVC et Paging - Search & Résultat Scénario

Le problème que j'ai est quand je passe à la deuxième page, il n'affiche rien ..

J'utilise cette bibliothèque pour la pagination .. http://stephenwalther.com/Blog/archive/2008/09/18/asp-net-mvc-tip-44-create-a-pager-html-helper.aspx

ce mon code d'actions.

[AcceptVerbs("GET")] 
    public ActionResult SearchByAttraction() 
    { 
     return View(); 
    } 

    [AcceptVerbs("POST")] 
    public ActionResult SearchByAttraction(int? id, FormCollection form) 
    {.... 
    } 

et voici ce que je utilise sur mon formulaire get à la page par

<% = Html.Pager (ViewData.Model)%> // mais quand je fais cela, il va à ce [méthode AcceptVerbs ("GET")] publique ActionResult SearchByAttraction()

au lieu d'aller à cette cette

[AcceptVerbs ("POST")] publique ActionResult SearchByAttraction (int? i d, sous forme FormCollection)

qui fait en quelque sorte .. mais je sence ne peux pas vraiment penser à une autre façon de le faire

Toute aide serait très apprécié ..

Thanx

Répondre

9

Je recommanderais contre doin g paging via HTTP POST. La page et les critères de recherche sont deux exemples parfaits de ce que les querystrings sont destinés. Mettez ces valeurs dans la chaîne de requête & pour charger vos arguments d'action.

Pensez-y. Vous pouvez rechercher des «tartes» dans google, naviguer jusqu'à la page 14, copier le lien et l'envoyer à votre grand-mère. Vous ne pouvez pas le faire lorsque votre pagination/recherche ne fonctionne qu'avec les publications de formulaire.

+0

Hm ... Bon point :) – maxnk

1

de Bien sûr, il va frapper la version GET de SearchByAttraction, car en utilisant ce contrôle, vous avez un lien en sortie.

Donc ce que vous devez faire:

1. make form on the page: 
    <form id="myForm" action="your/url" method="post"> 
     <input type="hidden" name="page" /> 

     <input type="hidden" name="your_param1" /> 
     <input type="hidden" name="your_param2" /> 
     <input type="hidden" name="your_paramN" /> 
    </form> 

2. make changes to pager - it should produce something like that: 

    <ul id="pager"> 
     <li><a href="url/as/was/created/by/pager" onclick="return submitMyForm(1);">1</a></li> 
     <li><a href="url/as/was/created/by/pager" onclick="return submitMyForm(2);">2</a></li> 
     <li><a href="url/as/was/created/by/pager" onclick="return submitMyForm(3);">3</a></li> 
    </ul> 

3. add simple javascript function on the page: 

    <script language="javascript" type="text/javascript"> 
     function submitMyForm(page) { 
      var form = document.forms["myForm"]; 
      form.elements["page"].value = page; 
      form.submit(); 
      return false; 
     } 
    </script> 

Et vous serez en mesure de frapper la version POST, car cliquant sur le lien soumettra votre formulaire sur le serveur en utilisant une requête POST.

1

Essayez ceci:

[AcceptVerbs("GET")] 
public ActionResult SearchByAttraction(int? id) 
{ 
    return View(); 
} 

id doit contenir le numéro de page, vous devez afficher.

Si vous perdez des valeurs de formulaire à l'aide de cette approche, vous devrez modifier la méthode Html.Pager pour que chaque lien d'action devienne un lien de soumission de formulaire.

1

Thanx tout le monde j'ai finalement obtenu ce travail .. juste utilisé une forme .. et a fait quelque chose comme ça

Actions contrôleur

[AcceptVerbs("GET")] 
    public ActionResult SearchByAttraction() 
    { 
     return View(); 
    } 

    public ActionResult Search(FormCollection form,int? id) 
    { 
     var info = _repository.ListByLocation(city, postal, pageIndex, 2); 
     return View("SearchByAttraction", info); 
    } 

Voir

<% using (Html.BeginForm("Search", "Home", FormMethod.Get)) 
{ %> 

il appelle la recherche méthode chaque fois qu'il fait un poste ..