Je me demandais s'il y avait un moyen de créer un ActionLink
ou similaire, cela ne change que quelques paramètres de la requête actuelle, et garde tous les autres paramètres intacts . Par exemple si je suis sur une URL comme http://example.com/Posts/Index?Page=5&OrderBy=Name&OrderDesc=True
je veux changer seulement le Page
, ou le paramètre OrderBy
et garder tous les autres paramètres identiques, même ceux que je ne sais pas encore (comme quand je veux ajouter un paramètre Search
ou quelque chose de similaire aussi).Comment obtenir tous les paramètres actifs dans ASP.NET MVC (2)
L'en-tête de mon action actuelle ressemble à ceci:
public ActionResult Index(int? Page, string OrderBy, bool? Desc)
et je suis seulement intéressé par les valeurs que ce contrôleur « Eats ». Je veux cependant que lorsque je prolonge cette action (par exemple avec un paramètre string Search
) les liens devraient fonctionner de la même manière qu'avant.
Voici ce que je faisais déjà:
- Créer une nouvelle
RouteValueDictionary
et le remplir avec tout deRouteData.Values
- Problème: Ce ne remplit que les paramètres qui sont utilisés dans le routage, de sorte que tous les autres les paramètres optionnels (comme
Page
) au contrôleur sont perdus
- Problème: Ce ne remplit que les paramètres qui sont utilisés dans le routage, de sorte que tous les autres les paramètres optionnels (comme
- Ajoutez tout de
HttpContext.Request.QueryString
au dictionnaire précédent- C'est ce que je suis actuellement en utilisant
- Problème: Il pourrait avoir des trucs indésirable, que le contrôleur N'a pas demander, et il ne fonctionne pas si la page a été chargée à l'aide POST. Vous aussi n'avez pas ModelBindings (mais ce n'est pas un gros problème, parce que nous sommes tout réémettre de toute façon)
- Utilisez
HttpContext.Request.Params
- Problème: cela a trop de données d'ordure qui IMHO il ne faut pas ajouter à une
RouteValueDictionary
qui est passé à unActionLink
- Problème: cela a trop de données d'ordure qui IMHO il ne faut pas ajouter à une
Ainsi, les questions suivantes:
- Existe-t-il un
RVD
contenant toutes les données transmises au contrôleur et utilisé par celui-ci? - Cette solution est-elle bonne, ou y at-il des mises en garde auxquelles je n'ai pas pensé (principalement dans le contexte de la modification de quelques paramètres de requête tout en gardant les autres intacts)?
- Existe-t-il un moyen de filtrer les données "indésirables" de l'objet
Params
?
EDIT: Vérifié la variable RouteData.DataTokens
, mais elle est généralement vide et ne contient pas tout ce dont j'ai besoin. Il semble ne contenir que des paramètres nécessaires pour le routage quelque part, mais pas tous les paramètres.
Avez-vous regardé dans le dictionnaire 'RouteData.DataTokens'? Ils pourraient être là ... S'ils le sont, je le republierai comme une réponse. – Charlino
@Charlino: Voilà où ils devraient être. http://msdn.microsoft.com/en-us/library/system.web.routing.routedata.datatokens.aspx –
Oui, c'est ce que je pensais. Intéressant que vous trouvez 'area' dans DataTokens parce que j'aurais pensé qu'il a été utilisé pour trouver un itinéraire correspondant. – Charlino