Question

J'essaie de fournir un lien pour filtrer les résultats de la recherche.

    <%= Html.ActionLink("Filter Results", "Index", new { page = Model.RestaurantList.PageIndex(), searchText = Model.SearchText, useFilter = true, filterOption = Model.FilterOption, filterText = Model.FilterText }, null)%>

La définition du contrôleur est en tant que telle

 public ActionResult Index(int? page, string searchText, bool useFilter, string filterText, string filterOption)

Cependant, lorsque je débogue ceci, les valeurs ne sont pas définies correctement, même la variable useFilter.

Mon lien est rendu en localhost / home / index / true? page = 0

Avez-vous des idées pour résoudre ce problème?

Était-ce utile?

La solution

Le segment de code semble bon. Je pense qu'il y a 2 erreurs possibles:

  1. Information de route incorrecte: vérifiez la routes.MapRoute (...) appelle fichier global.ascx.cs / vb à vérifier un itinéraire pour l’action Home # Index est correctement configuré
  2. Mauvais contrôleur: essayez d’utiliser la surcharge d’ActionLink qui spécifie explicitement un contrôleur

Si vous ne pouvez toujours pas le faire fonctionner, vous pouvez poster plus d'informations (comme le code de mappage de route, le nom de la vue / du contrôleur)

Autres conseils

On dirait que cela devrait fonctionner.

Avez-vous vérifié que les champs de modèle que vous transmettez au ActionLink contiennent réellement des données?

  

Cependant, lorsque je débogue ceci, les valeurs ne sont pas définies correctement, même la variable useFilter.   Mon lien est rendu localhost / home / index / true? Page = 0

Je pense que votre paramètre useFilter est réellement rendu. Je pense que cela correspond à la route.

Essayez de définir une valeur codée en dur pour searchText

  

S'il apparaît, vous n'avez pas défini votre modèle dans le contrôleur.

J'ai eu une situation similaire.

Quelque chose comme ça:

Html.ActionLink("Click me", "Index", "Student", 
        { ID = theclass.StudentID }, null) 

toujours rendu comme

localhost/myapp/Student/Index/1234

Pendant que j'essayais, j'ai remarqué qu'une Index partie avait disparu de l'URL si je changeais le nom du paramètre de ID à quelque chose comme

.
localhost/myapp/Student/?IDX=1234

Il s'avère que le nom du paramètre IDX est spécial en raison de l'entrée de route par défaut dans Global.asax.cs (qui définit le modèle d'accès aux objets métier RESTful)

Pour contourner ce problème, j’ai simplement cessé d’utiliser <=> pour prendre un identifiant et ai défini une autre méthode comme celle-ci:

public ActionResult Detail(int ID)

Après tout, conformément au principe de conception RESTfull, <=> est conçu pour afficher la liste & "; liste des objets métier &"; ou une sorte de collection d'objet métier, pas un seul objet métier. Ainsi, passer l'ID d'objet métier à <=> constitue en quelque sorte une violation du modèle.

Au lieu de tordre le bras et de forcer ma conception maladroite, j'ai changé de façon naturelle.

Je pense que la meilleure pratique pour concevoir <=> le point d'entrée est de le conserver sans paramètre ou de ne transmettre que les paramètres de filtrage / tri.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top