définition de la chaîne de requête dans redirecttoaction dans asp.net mvc

je dois faire un redirecttoaction appel à asp.net mvc vue avec différents paramètres, extrait de connaître la provenance de la vue (le statut d'une grille).

j'ai (dans un champ caché) le contenu de la chaîne de requête (parfois vide, parfois avec 2 paramètres et ainsi de suite), donc j'ai des problèmes pour créer le tableau des valeurs de route.

Sont là quelques assistants, qui m'aident à convertir une chaîne de requête d'un itinéraire valeurs du tableau? Quelque chose comme:

string querystring ="sortdir=asc&pag=5";
return RedirectToAction( "Index", ConvertToRouteArray(querystring));
6
demandé sur tereško 2012-08-29 18:33:33

2 réponses

pour créer une solution générique convertissez votre querystring à un dictionnaire et au dictionnaire à la RouteValueDictionary.

var parsed = HttpUtility.ParseQueryString(temp); 
Dictionary<string,object> querystringDic = parsed.AllKeys
    .ToDictionary(k => k, k => (object)parsed[k]); 

return RedirectToAction("Index", new RouteValueDictionary(querystringDic)); 
9
répondu Erwin 2012-08-31 10:58:36

une limitation de l'utilisation de RedirectToAction("actionName", {object with properties}) est que RedirectToAction() n'a pas de surcharge qui accepte RedirectToAction(ActionResult(), {object with properties}) , donc vous êtes forcé d'utiliser des chaînes magiques pour le nom d'action (et éventuellement le nom du contrôleur).

si vous utilisez la bibliothèque T4MVC , elle inclut deux méthodes d'assistance API fluentes ( AddRouteValue(...) et AddRouteValues(...) ) qui vous permettent d'ajouter facilement un seul paramètre querystring, toutes les propriétés d'un objet, ou l'ensemble Demande.QueryString. Vous pouvez appeler ces méthodes soit sur les objets ActionResult de T4MVC, soit directement sur la méthode RedirectToAction (). Bien sûr, T4MVC est tout au sujet de se débarrasser des cordes magiques!

par exemple: supposons que vous vouliez rediriger vers une page de connexion pour une requête non authentifiée, et passer L'URL initialement demandée comme paramètre de chaîne de requête de sorte que vous puissiez sauter là après une connexion réussie. L'un ou l'autre des exemples de syntaxe suivants fonctionnera:

return RedirectToAction(MVC.Account.LogOn()).AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl));

ou

return RedirectToAction(MVC.Account.LogOn().AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl)));
2
répondu Martin_ATS 2013-01-10 20:10:03