84 votes

comment ajouter des valeurs de querystring avec la méthode RedirectToAction ?

dans asp.net-mvc, je suis en train d'utiliser RedirectToAction("myActionName");

Je veux passer certaines valeurs via la chaîne de requête, comment faire ?

169voto

Talljoe Points 8423

Toutes les valeurs transmises qui ne font pas partie de l'itinéraire seront utilisées comme paramètres de la chaîne de recherche :

return this.RedirectToAction
  ("myActionName", new { value1 = "queryStringValue1" });

Je reviendrais :

/controller/myActionName?value1=queryStringValue1

En supposant qu'il n'y a pas de paramètre de route nommé "valeur1".

4voto

Martin_ATS Points 395

Pensez également à utiliser T4MVC, qui dispose des méthodes d'extension suivantes AddRouteValue() et AddRouteValues() (voir ici ).

-1voto

// Nom du contrôleur

var controllerName = RouteData.Values["controller"].ToString() ;

// Nom de l'action

var actionName = RouteData.Values["action"].ToString() ;

// Chaîne de requête Paramètres

var qsParameters = HttpUtility.ParseQueryString(Request.UrlReferrer.Query) ;

// var dictionary = qsParameters.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value) ;

return RedirectToAction(actionName, controllerName, new { qsParameters }) ;

Bien sûr, cela ne fonctionnera pas non plus, car le compilateur MVC crée une nouvelle "collection JSON" avec le nom de la variable (dans le cas présent "qsParameters") comme clé/nom et toutes les "choses paramétrées à l'intérieur" comme variable à la clé de votre variable "représentative" (dans notre cas concret - qsParameters).

Dans le cas présent, le problème est que la liste renvoyée par la méthode ParseQueryString semble se comporter différemment et qu'il est impossible de créer un dictionnaire à partir de cette liste

Il y a aussi la "mauvaise alternative" comme celle-ci : return RedirectToAction("ViewTopicDetails", controller + Request.UrlReferrer.Query) ;

Et si vous l'essayez par exemple dans la fenêtre immédiate, vous obtiendrez EXACTEMENT la demande que vous avez formulée, mais MVC a manifestement été créé pour ne pas fonctionner de cette manière.

Quelqu'un peut confirmer si c'est réellement possible ce que le demandeur (et maintenant moi aussi) demande.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X