2017-02-08 1 views
0

J'ai un résultat d'action que je veux rediriger vers une action avec un ID dynamique.RedirectToAction As Get Format de requête

return RedirectToAction("Engine", new {id = latestVersion.Id}); 

Cependant, l'URL qui renvoie finit par être:

domain.com/project/engine/xxx 

ce que je dois est cependant qu'il soit:

domain.com/project/engine?id=xxx 

Voici mes maproutes actuelles:

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    routes.MapRoute(
     "PrevSession", // Route name 
     "{controller}/{action}/{id}/{id2}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional } // Parameter defaults 
    ); 

Y at-il un moyen de changer le wa y est-il formaté au niveau du contrôleur?

+0

Pas au niveau du contrôleur. Les contrôleurs n'ont aucun contrôle sur les URL. Vous devrez fournir tous les RouteMaps dont vous disposez (qui contrôlent les URL). –

+0

Pourquoi? Vous utilisez MVC magic pour analyser le paramètre id dans vos routes, et 'RedirectToAction' en fait usage. – devio

+0

@devio, j'ai beaucoup de javascript qui pleure s'il y a ce supplément/là pour l'id – Scottingham

Répondre

1

Option 1.

vous pouvez modifier le param d'itinéraire id à un autre nom comme,

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{myId}", // URL with parameters 
      new { controller = "Home", action = "Index", myId = UrlParameter.Optional } // Parameter defaults 
     ); 

et modifier en conséquence les contrôleurs (où ils sont utilisés), ou

Option 2.

Vous pouvez ajouter une définition d'itinéraire fictif sans id paramètre comme,

routes.MapRoute(
       "RouteWithoutId", // Route name 
       "{controller}/{action}" 
      ); 

et utiliser RedirectToRoute méthode comme,

return RedirectToRoute("RouteWithoutId", new { action = "Engine", id = latestVersion.Id}); 

espérons que cette aide.

0

réponse simple

 routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}", // URL with parameters 
      new { controller = "Home", action = "Index" } // Parameter defaults 
     ); 
+2

Ouais mais maintenant vous avez cassé la route '/ controller/action/id' pour toutes les autres méthodes d'action utilisant cette route (non-attribué). Cela signifie que les liens mis en signet ou les liens statiques (ceux qui ne sont pas @ @ Html.ActionLink()) ne fonctionnent plus. – CodeCaster

+1

Oui vrai, que personnellement je n'utilise pas dans l'application, mais s'il y a une réponse qui répond aux deux situations je l'accepterai! – Scottingham