Comment ajouter un paramètre de lien aux assistants de balise asp dans ASP.NET Core MVC

104

J'ai beaucoup d'expérience avec ASP.NET MVC 1-5 . Maintenant, j'apprends ASP.NET Core MVC et je dois passer un paramètre pour créer un lien dans la page. Par exemple, j'ai l' action suivante

 [HttpGet]
 public ActionResult GetProduct(string id)
 {
      ViewBag.CaseId = id;
      return View();
 }

Comment puis-je implémenter le lien pour cette action à l'aide des tag helpers?

<a asp-controller="Product" asp-action="GetProduct">ProductName</a>
Elvin Mammadov
la source

Réponses:

195

Vous pouvez utiliser le préfixe d'attribut asp-route-pour préfixer les noms de vos variables d'itinéraire.

Exemple:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>
Alex
la source
2
Si j'ai plusieurs paramètres, je dois tout ajouter avec cette méthode?
Elvin Mammadov le
40
@ elvin-mammadov, yup, en utilisant asp-route-yourParamName, par exemple:asp-route-foo="bar"
Alex
2
@ElvinMammadov Votre commentaire asp-route-yourParamNameconcernant les paramètres d'entrée supplémentaires a été très utile. Merci.
nam
Votre exemple @ Alex générer le code HTML comme: <a href="https://stackoverflow.com/Product/GetProduct/10">ProductName</a>. Question : En utilisant l'assistant de balise d'ancrage, comment pouvons-nous obtenir la valeur du paramètre (par exemple 10) en utilisant jquery? `
nam
3
@nam Vous pouvez ajouter un attribut de données à côté de l'assistant ASP. <a asp-route-id="@item.Id" data-id="@item.Id" />puis obtenez l'identifiant avec $('a').attr('data-id'):)
Steen Schütt
18

Vous souhaiterez peut-être appliquer la syntaxe suivante.

<a asp-controller="Member"
   asp-action="Edit"
   asp-route-level="3"
   asp-route-type="full"
   asp-route-id="12">Click me</a>

Cela produira la route d'appel comme celle-ci.

/ Membre / Modifier / 3 / complet / 12

Ensuite, vous pouvez le recevoir dans la méthode indiquée ci-dessous.

[Route({level}/{type}/{id})]
public IActionResult Edit(int level, string type, int id) { ... }

Bien que l'attribut décorant la méthode ne soit pas requis dans MVC, il montre plus clairement comment lier les attributs du lien aux paramètres passés dans la méthode.

Konrad Viltersten
la source
Pour moi au lieu de /Member/Edit/3/full/12cela génère/Member/Edit/3?type=full&id=12
Arif
1
@Arif Je ne peux pas dire avec certitude pourquoi et je ne suis pas dans un environnement C # pour le moment (trop paresseux pour en démarrer un aussi). Cependant, je suggérerais que cela dépend de si nous déclarons explicitement [FromUrl] ou [FromQuery] etc., qui peuvent différer entre les différentes versions de la palette .NET et / ou dépendre de l'héritage de classes pour les appels WebAPI purs (comme opposé aux classes pour BaseController avec vues et tout ça). Juste une guestimation, NB.
Konrad Viltersten
0

si vous voulez mettre l'ID de variable dans le lien dans la grille ou le tableau, quelque chose sous le code peut être utilisé

[HttpGet]
[Route("/Product/GetProduct/{id}")]
 public ActionResult GetProduct(string id)
 {
      ViewBag.CaseId = id;
      return View();
 }


 <a  asp-controller="Product" asp-action="GetProduct" asp-route-id="@item.id" >ProductName</a>
Neeraj Singh Chouhan
la source
Pouvez-vous expliquer votre réponse? Les réponses de code uniquement sans explication ont tendance à être rejetées ou supprimées.
SS Anne le