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>
Elvin Mammadov
quelle

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>
Alex
quelle
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.

Konrad Viltersten
quelle
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>
Neeraj Singh Chouhan
quelle
Können Sie Ihre Antwort erklären? Nur-Code-Antworten ohne Erklärung werden häufig abgelehnt oder entfernt.
SS Anne