Comment obtenir l’ID de l’itinéraire actuel dans une vue depuis l’URL (ASP.NET MVC)

Dans la vue renvoyée par une URL telle que / Controller / Action / 1 (en supposant la route par défaut de controller / action / id), comment puis-je accéder à l’ID depuis la vue?

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

Je pense que c’est ce que vous recherchez:

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

ViewData est exactement la bonne façon de le faire.

Votre autre option serait de passer un modèle contenant un ID à la vue.

Edit: Sans savoir exactement ce que vous voulez 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 envoie-t-il uniquement le champ Id à la vue? Il est difficile d’imaginer ce qu’est le scénario.

Si la valeur d’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 View(id) et vous n’avez pas besoin d’utiliser ViewData.

L’append à la vue est la bonne chose à faire. En ce qui concerne l’ajout, vous pouvez toujours append un ActionFilter personnalisé qui le récupère dans le dictionnaire de routage et l’insère dans les données.

Nous pouvons passer id comme Route Data ou QuerySsortingng , afin de les supporter tous les deux, je recommande cette méthode:

 var routeValues=Url.RequestContext.RouteData.Values; var paramName = "id"; var id = routeValues.ContainsKey(paramName)? routeValues[paramName]: Request.QuerySsortingng[paramName]; 

Je pense que vous pouvez diriger l’utilisation dans l’action url Url.RequestContext.RouteData.Values ​​[“id”]

Juste mes deux cents, mais j’utilise toujours des modèles de vue pour transmettre des données à mes vues. Même si c’est aussi simple que d’avoir besoin d’un int comme l’id.

Faire cela rend l’access à cette valeur sortingvial, comme MVC fait tout le travail pour vous.

Pour ce que cela vaut, je nomme généralement mes modèles de vue en tant que tels:

{Controller}{ViewName}ViewModel

Cela aide à garder les choses organisées à grande échelle.

Un exemple:

 // ~/ViewModels/HomeEditViewModel.cs public class HomeEditViewModel { public int Id { get; set; } } // ~/Controllers/HomeController.cs public IActionResult Edit(int id) { return View(new HomeEditViewModel() { Id = id }); } // ~/Views/Home/Edit.cshtml @model HomeEditViewModel 

Id: @Model.Id

Je viens d’utiliser < %= model.id %> et ça marche