79 votes

Comment obtenir l'ID de la route actuelle dans une vue à partir de l'URL (ASP.NET MVC)

Dans la vue qui est renvoyée à partir d'une URL telle que /Controller/Action/1 (en supposant que la route par défaut est controller/action/id), comment puis-je avoir accès à l'ID à partir de la vue ?

Je ne veux pas avoir à l'ajouter au dictionnaire ViewData au niveau de l'action lors du traitement de la demande.

3 votes

Pourquoi ne pas l'ajouter au dictionnaire ViewData ? C'est le mécanisme qui est prévu pour exactement ce que vous décrivez.

184voto

Francisco Points 2462

Je pense que c'est ce que vous cherchez :

<%=Url.RequestContext.RouteData.Values["id"]%>

0 votes

Pourquoi cela n'est-il pas correctement documenté ailleurs sur le web ? grrrr

0 votes

Cette réponse n'explique pas de manière adéquate comment elle atténue le Reflected XSS. Voté à la baisse.

0 votes

@CervEd ce n'est pas une partie de la question mais si c'est important pour vous, la chaîne résultante est échappée par le moteur de rasoir à moins que vous ne le surchargez. En outre, le contrôleur est protégé contre les valeurs de route potentiellement dangereuses.

16voto

CoderDennis Points 7170

ViewData est exactement le bon moyen de le faire.

Votre autre option serait de passer un modèle qui contient l'ID à la vue.

Editar: Sans savoir exactement ce que vous cherchez à faire, il est difficile de donner des conseils plus précis. Pourquoi avez-vous besoin d'un identifiant, mais pas d'autres données de modèle ? Votre contrôleur n'envoie-t-il vraiment que le champ Id à la vue ? Il est difficile d'imaginer quel est le scénario.

Si la valeur de l'ID est vraiment la seule information de modèle transmise à votre vue, vous pouvez utiliser l'ID lui-même comme modèle. La valeur de retour de votre méthode d'action serait alors la suivante View(id) et vous n'auriez pas besoin d'utiliser ViewData.

0 votes

Malheureusement, la vue n'a pas de modèle. Quelque chose à propos de ViewData["id"] = id; ne me convient pas. Je suppose que c'est le fait que j'utilise ce modèle un certain nombre de fois. Une ou deux fois et ça ne me dérangerait pas. Merci.

3voto

matwonk Points 416

Réponse simple dans Razor :

@Url.RequestContext.RouteData.Values["id"]

Dans ASP.NET Core

@Url.ActionContext.RouteData.Values["id"]

3voto

Poyi Hong Points 21

Si vous utilisez .NET Core

Utilisez ce code

Url.ActionContext.RouteData.Values["id"]

3voto

Wyatt Barnett Points 12541

L'ajouter aux données d'affichage est la bonne chose à faire. Pour ce qui est de la façon de l'ajouter, vous pouvez toujours ajouter un fichier personnalisé de type ActionFilter qui le récupère dans le dictionnaire des routes et l'insère dans les données de la vue.

0 votes

J'aime cette idée, avec une vérification correcte des valeurs nulles, il suffit de mettre cela en haut de votre contrôleur et vous devriez toujours pouvoir compter sur le fait qu'il soit là quand il est censé l'être.

0 votes

Ou alors, créez simplement une petite classe ViewDataWrapper qui pourrait gérer le truc "que faire si c'est nul" pour vous .

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