2017-02-06 1 views
0

J'ai une page MVC pour créer une entité. À la fin, je veux rediriger vers l'entité parente. Je le fais comme ceci:Rendre ASP.NET MVC traiter un paramètre de route nommé `` id '' comme tout autre paramètre

return RedirectToAction("Edit", new { id = vm.Parent }); 

Lorsque j'utilise un autre nom de paramètre, il est interprété comme une URL param:

return RedirectToAction("Edit", new { foo = vm.Parent }); 

rend comme /Entities/Edit?foo=234

Mais ASP MVC prend un itinéraire param nommé id comme un cas spécial et l'URL ressemble à: /Entities/Edit/234. Cela ne fonctionne pas pour moi parce que le routage n'est pas configuré pour fonctionner avec cela. Je cherche à obtenir une URL comme /Entities/Edit?id=234.

Comment le forcer à fonctionner de cette façon? Itinéraire configuration:

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+3

Dans votre configuration de route, recherchez une route mappée qui ressemble à ceci: "{{controller}/{ action}/{id} "' et ajoutez les détails à votre question. – spender

+1

Utilisez-vous les routes par défaut? –

+0

@spender ajouté la configuration de l'itinéraire – Johanes

Répondre

0

Par le regard de celui-ci, vous n'utilisez la route de configuration de routage par défaut, qui ne spécifié id comme UrlParameter défini. Si vous voulez un paramètre personnalisé, vous devrez définir comme tel:

routes.MapRoute(
    name: "ControllerName", 
    url: "controllername/edit/{foo}" 
); 

Ou si vous souhaitez utiliser foo au lieu de id au niveau mondial, juste modifier votre itinéraire existant:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{foo}", 
    defaults: new { controller = "Home", action = "Index", foo = UrlParameter.Optional } 
); 

Ou si vous ne voulez pas de bonnes URL avec un paramètre de chaîne de requête inutile, modifiez votre paramètre par défaut:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}", 
    defaults: new { controller = "Home", action = "Index" } 
);