RedirectToAction avec le paramètre
J'ai une action que je peux appeler une ancre ainsi, Site/Controller/Action/ID
où ID
est un int
.
Plus tard, j'ai besoin de rediriger à cette même Action à partir d'un Contrôleur.
Est-il un moyen astucieux de faire cela? Actuellement, je suis en cachant ID
dans tempdata, mais quand vous
appuyez sur f5 pour actualiser la page à nouveau après le retour, le tempdata est passé et que la page se bloque.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer l'id dans le cadre de la routeValues paramètre de la RedirectToAction() la méthode.
Cela entraînera une redirection vers le Site/Controller/Action/99. Pas besoin de temp ou toute sorte d'afficher les données.
Return RedirectToAction("Action", "Controller", New With {.id = 99})
Kurt réponse doit être bon, d'après mes recherches, mais quand j'ai essayé j'ai eu à faire pour l'obtenir pour travailler effectivement pour moi:
Si je n'ai pas de spécifier le contrôleur et l'action dans le
RouteValueDictionary
il ne fonctionne pas.Aussi quand codé comme ceci, le premier paramètre (Action) semble être ignoré. Donc, si vous venez de spécifier le contrôleur dans le Dict, et attendre le premier paramètre pour spécifier l'Action, il ne fonctionne pas non plus.
Si vous arrivez plus tard, essayez de Kurt réponse de la première, et si vous avez encore des questions d'essayer celui-ci.
controller
paramètre est facultatif si l'action de redirection est dans le même contrôleur que l'action que vous êtes la redirection de.RedirectToAction
avec le paramètre:Il est également intéressant de noter que vous pouvez passer à travers plus de 1 paramètre. id sera utilisé pour faire partie de l'URL et tous les autres seront transmises comme paramètres après ? dans l'url et sera UrlEncoded en tant que par défaut.
par exemple
Donc l'url serait:
Ceux-ci peuvent ensuite être référencées par votre contrôleur:
MVC 4 exemple...
Notez que vous n'avez pas toujours de passer le paramètre nommé ID
Et,
Bien sûr, vous pouvez affecter la chaîne de modèle de champs au lieu d'utiliser ViewBag si c'est votre préférence.
exemple
Si votre paramètre est un objet complexe, cela résout le problème. La clé est la
RouteValueDictionary
constructeur.Si vous avez des collections, il fait un peu plus délicat, mais cette autre réponse, couvre très bien.
Si l'on veut Afficher de message d'erreur pour
[httppost]
alors il/elle peut essayer par le passage d'un ID à l'aide depour plus de Détails, comme cette
Espère que ça fonctionne bien.
....
....
J'ai eu ce problème aussi, et tout à fait une belle façon de le faire si vous êtes dans le même contrôleur est d'utiliser des paramètres nommés:
Cela peut être il y a des années, mais de toute façon, cela dépend aussi de votre Global.asax carte de l'itinéraire, puisque vous pouvez ajouter ou modifier des paramètres pour l'adapter à ce que vous voulez.
par exemple.
Mondiale.asax
ensuite les paramètres que vous aurez besoin de passer des va changer:
Si votre besoin de rediriger vers une action à l'extérieur du contrôleur cela fonctionne.
A fonctionné pour moi, n'a pas besoin de faire
new{id = id}
J'ai été la redirection vers l'intérieur de la même contrôleur, donc je n'ai pas besoin de la
"Controller"
mais je ne suis pas sûr que sur la logique spécifique de derrière lorsque le contrôleur est nécessaire en tant que paramètre.Suivantes réussi avec asp.net de base 2.1. Il peut s'appliquer ailleurs. Le dictionnaire ControllerBase.ControllerContext.RouteData.Valeurs est directement accessible et modifiable à partir de l'intérieur de la méthode d'action. C'est peut-être l'ultime destination des données dans les autres solutions. Il montre également où le routage par défaut proviennent les données.