Hinzufügen von Link-Parametern zu Asp-Tag-Helfern in ASP.NET Core MVC


104

Ich habe viel Erfahrung mit ASP.NET MVC 1-5 . Jetzt lerne ich ASP.NET Core MVC und muss einen Parameter übergeben, um auf Seite zu verlinken. Zum Beispiel habe ich die folgende Aktion

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

Wie kann ich den Link für diese Aktion mithilfe von Tag-Helfern implementieren?

<a asp-controller="Product" asp-action="GetProduct">ProductName</a>

Antworten:


193

Mit dem Attributpräfix können Sie asp-route-Ihren Routenvariablennamen ein Präfix voranstellen.

Beispiel:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>

2
Wenn ich mehrere Parameter habe, muss ich mit dieser Methode alles hinzufügen?
Elvin Mammadov

40
@ Elvin-Mammadov, yup, mit asp-route-yourParamNamezum Beispiel:asp-route-foo="bar"
Alex

2
@ElvinMammadov Ihr Kommentar asp-route-yourParamNamezu zusätzlichen Eingabeparametern war sehr hilfreich. Vielen Dank.
Nam

@Alex Ihr Beispiel generiert das HTML als : <a href="https://stackoverflow.com/Product/GetProduct/10">ProductName</a>. Frage : Wie können wir bei Verwendung des Anker-Tag-Helfers den Parameterwert (z. B. 10) mit ermitteln jquery? `
nam

3
@nam Sie können ein Datenattribut neben dem ASP-Helfer hinzufügen. <a asp-route-id="@item.Id" data-id="@item.Id" />und dann hol die ID mit $('a').attr('data-id'):)
Steen Schütt

18

Möglicherweise möchten Sie die folgende Syntax anwenden.

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

Dadurch wird die Anrufroute wie folgt erzeugt.

/ Member / Edit / 3 / full / 12

Dann können Sie es in der unten gezeigten Methode erhalten.

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

Obwohl das Attribut, mit dem die Methode dekoriert wird, in MVC nicht erforderlich ist, wird deutlicher gezeigt, wie die Attribute aus dem Link an die übergebenen Parameter in der Methode gebunden werden.


Für mich stattdessen /Member/Edit/3/full/12generiert/Member/Edit/3?type=full&id=12
Arif

1
@Arif Ich kann nicht genau sagen warum und ich bin im Moment nicht in einer C # -Umgebung (zu faul, um auch eine zu starten). Ich würde jedoch vorschlagen, dass es davon abhängt, ob wir explizit [FromUrl] oder [FromQuery] usw. angeben , was zwischen verschiedenen Versionen der .NET-Palatform unterschiedlich sein kann und / oder davon abhängt, Klassen für reine WebAPI-Aufrufe (as) zu erben im Gegensatz zu den Klassen für BaseController mit Ansichten und all dem). Nur eine Gastanimation, NB.
Konrad Viltersten

0

Wenn Sie die Variablen-ID in den Link im Raster oder in der Tabelle einfügen möchten, kann etwas unter dem Code verwendet werden

[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>

Können Sie Ihre Antwort erklären? Nur-Code-Antworten ohne Erklärung werden häufig abgelehnt oder entfernt.
SS Anne
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.