J'ai une action que j'appelle d'une ancre ainsi, Site/Controller/Action/ID
où ID
est un int
.
Plus tard, je dois rediriger vers cette même action à partir d'un contrôleur.
Existe-t-il un moyen intelligent de le faire? Actuellement, je planque ID
dans tempdata, mais lorsque vous appuyez sur f5 pour actualiser à nouveau la page après le retour, les tempdata ont disparu et la page se bloque.
c#
asp.net-mvc
controller
redirecttoaction
Eric Brown - Cal
la source
la source
Return RedirectToAction("Action", "Controller", New With {.id = 99})
La réponse de Kurt devrait être juste, d'après mes recherches, mais quand je l'ai essayé, j'ai dû le faire pour que cela fonctionne réellement pour moi:
Si je n'ai pas spécifié le contrôleur et l'action dans
RouteValueDictionary
cela n'a pas fonctionné.De plus, quand il est codé comme ceci, le premier paramètre (Action) semble être ignoré. Donc, si vous spécifiez simplement le contrôleur dans le Dict et que le premier paramètre spécifie l'action, cela ne fonctionne pas non plus.
Si vous venez plus tard, essayez d'abord la réponse de Kurt, et si vous avez encore des problèmes, essayez celle-ci.
la source
controller
paramètre est facultatif si l'action de redirection se trouve dans le même contrôleur que l'action à partir de laquelle vous redirigez.RedirectToAction
avec paramètre:la source
new {id = id}
fonctionne aussi bien car le framework sait à quelle variable vous faites référence.Il convient également de noter que vous pouvez passer par plus d'un paramètre. id sera utilisé pour constituer une partie de l'URL et tous les autres seront passés en tant que paramètres après un? dans l'url et sera UrlEncoded par défaut.
par exemple
L'URL serait donc:
Ceux-ci peuvent ensuite être référencés par votre contrôleur:
la source
exemple
la source
Exemple MVC 4 ...
Notez que vous n'avez pas toujours besoin de passer un paramètre nommé ID
Et,
Bien sûr, vous pouvez affecter une chaîne aux champs du modèle au lieu d'utiliser ViewBag si c'est votre préférence.
la source
Si votre paramètre se trouve être un objet complexe, cela résout le problème . La clé est le
RouteValueDictionary
constructeur.S'il vous arrive d'avoir des collections, cela rend les choses un peu plus compliquées, mais cette autre réponse couvre très bien cela .
la source
A travaillé pour moi, n'a pas eu besoin de le faire
new{id = id}
Je redirigeais vers le même contrôleur, donc je n'avais pas besoin de
"Controller"
mais je ne suis pas sûr de la logique spécifique derrière quand le contrôleur est requis en tant que paramètre.la source
RedirectToAction("Action", "Controller", new { id = id});
était exactement ce dont j'avais besoin dans mon application Core 3.1.Si quelqu'un souhaite afficher un message d'erreur,
[httppost]
il peut essayer de transmettre un ID en utilisantpour des détails comme celui-ci
J'espère que cela fonctionne bien.
la source
....
....
la source
J'ai également eu ce problème, et une très bonne façon de le faire si vous êtes dans le même contrôleur est d'utiliser des paramètres nommés:
la source
Cela peut être il y a des années, mais de toute façon, cela dépend également de votre itinéraire de carte Global.asax puisque vous pouvez ajouter ou modifier des paramètres pour s'adapter à ce que vous voulez.
par exemple.
Global.asax
alors les paramètres que vous devrez passer changeront en:
la source
Si vous avez besoin de rediriger vers une action en dehors du contrôleur, cela fonctionnera.
la source
Ce qui suit a réussi avec asp.net core 2.1. Cela peut s'appliquer ailleurs. Le dictionnaire ControllerBase.ControllerContext.RouteData.Values est directement accessible et accessible en écriture depuis la méthode d'action. C'est peut-être la destination ultime des données dans les autres solutions. Il montre également d'où proviennent les données de routage par défaut.
la source