J'ai une vue appelée Browse.chtml
, dans laquelle l'utilisateur peut entrer un terme de recherche ou laisser le terme de recherche vide. Lors de la saisie du terme de recherche, je souhaite diriger la page vers http://localhost:62019/Gallery/Browse/{Searchterm}
et lorsque rien n'est saisi, je souhaite diriger le navigateur vers http://localhost:62019/Gallery/Browse/Start/Here
.
Quand j'essaye ceci, j'obtiens l'erreur:
La demande d'action actuelle 'Parcourir' sur le type de contrôleur 'GalleryController' est ambiguë entre les méthodes d'action suivantes: System.Web.Mvc.ActionResult Browse (System.String) sur le type AutoApp_MVC.Controllers.GalleryController System.Web.Mvc.ActionResult Browse (Int32, System.String) sur le type AutoApp_MVC.Controllers.GalleryController
Tout ce que je fais avec MVC est pour la première fois. Je ne sais pas quoi essayer d'autre à ce stade.
public ActionResult Browse(string id)
{
var summaries = /* search using id as search term */
return View(summaries);
}
public ActionResult Browse(string name1, string name2)
{
var summaries = /* default list when nothing entered */
return View(summaries);
}
J'ai aussi ceci dans Global.asax.cs:
routes.MapRoute(
"StartBrowse",
"Gallery/Browse/{s1}/{s2}",
new
{
controller = "Gallery",
action = "Browse",
s1 = UrlParameter.Optional,
s2 = UrlParameter.Optional
});
routes.MapRoute(
"ActualBrowse",
"Gallery/Browse/{searchterm}",
new
{
controller = "Gallery",
action = "Browse",
searchterm=UrlParameter.Optional
});
la source
return View("Browse", summaries);
Je ne sais pas quand la question a été posée cette solution était disponible mais vous pouvez utiliser:
Cela devrait donc fonctionner correctement pour votre problème:
la source
Ajouter le code suivant dans RouteConfig.cs avant la route par défaut
Et ajoutez des attributs de route dans le contrôleur comme:
la source
Je pense que le point qui est fait est que vous n'avez pas besoin de tester implicitement les paramètres de chaîne de requête en utilisant la classe de requête.
MVC effectue le mappage pour vous (sauf si vous avez apporté des modifications importantes à vos routes MVC).
Ainsi un chemin actionlink de
serait automatiquement disponible pour votre contrôleur (de surface) avec le paramètre défini:
MVC fait le travail.
la source