Le routage dont j'ai besoin est assez simple, il me manque quelque chose. Comme exemple de code, je mets la situation la plus simple où je peux reproduire mon comportement.routage d'url entrant/sortant dans asp.net MVC
Vous avez cette ActionMethod:
public ActionResult Index(string provider)
{
ViewData["Message"] = provider;
return View("Index");
}
Et vous avez cette voie:
routes.MapRoute(
null,
"{controller}/{action}/{provider}",
new { controller = "Home", action = "Index", provider = "Default" }
); // Parameter defaults
Vous pouvez appeler /Accueil/Index/personnalisée et fournisseur prendra la valeur "personnalisée"
De quel chemin aurais-je besoin si je veux l'url /? Provider = Custom pour mapper le fournisseur à t Le paramètre. Je pensais que cela fonctionnerait simplement, car le contrôleur par défaut et l'action par défaut seraient utilisés, et le fournisseur de la chaîne de requête serait utilisé à la place de celui par défaut. mais la chaîne de requête est juste ignorée ici.
C'est un problème dans ma situation car j'ai un formulaire utilisant la méthode HTTP GET. L'action de formulaire doit être Html.BeginForm (c => c.Index (null)) qui est résolu en tant que / et la valeur de mon formulaire est ajoutée dans la chaîne de requête. (Le fournisseur étant un menu déroulant sous la forme)
Ainsi, l'url construit par la forme est /? Abc = valeur & cde = valeur ...
MISE À JOUR
La réponse acceptée ci-dessous (voir les commentaires) m'a conduit à cette solution:
routes.MapRoute(
"Search",
"search/",
new { controller = "Home", action = "Index" }
);
routes.MapRoute(
null,
"{controller}/{action}/{provider}",
new { controller = "Home", action = "Index", provider = "Default"}
);
Et déclarer la forme comme ceci:
Html.BeginRouteForm("Search", FormMethod.Get){
...
}
De cette façon, le formulaire fonctionnera avec le fournisseur dans QueryString (lorsque j'utilise la recherche d'itinéraire nommé) mais dans tous les autres cas, j'utiliserai l'itinéraire par défaut. :)
Oui vous avez raison, cela fonctionne, sauf que j'ai vraiment besoin d'une valeur par défaut là ... Je ne veux pas coder le repli sur le fournisseur par défaut dans chaque action qui l'utilise. –
Si le fournisseur est défini dans l'URL, pourquoi devrait-il faire partie de la collection de formulaires? Par exemple, si je vais sur site.com/home/about/customProvider et qu'un formulaire fait une action GET à partir d'ici, l'URL GET serait site.com/home/about/customProvider?form1=a&form2=b ... avez toujours votre fournisseur correct? – Tommy
C'est une page de recherche, vous pouvez rechercher dans différents fournisseurs que vous définissez dans le formulaire. Mais j'ai aussi besoin de lier à partir d'une autre page, directement à la recherche avec le fournisseur correct. –