Come aggiungere il parametro di collegamento agli helper tag ASP in ASP.NET Core MVC


104

Ho molta esperienza con ASP.NET MVC 1-5 . Ora imparo ASP.NET Core MVC e devo passare un parametro per il collegamento nella pagina. Ad esempio, ho la seguente azione

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

Come posso implementare il collegamento per questa azione utilizzando gli helper tag?

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

Risposte:


195

È possibile utilizzare il prefisso dell'attributo asp-route-per aggiungere un prefisso ai nomi delle variabili di rotta.

Esempio:

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

2
Se ho più parametri, devo aggiungere tutto con questo metodo?
Elvin Mammadov,

40
@ elvin-mammadov, sì, usando asp-route-yourParamName, ad esempio:asp-route-foo="bar"
Alex

2
@ElvinMammadov Il tuo commento asp-route-yourParamNamesui parametri di input aggiuntivi è stato molto utile. Grazie.
nam

@Alex Il vostro esempio genererà il codice HTML come: <a href="https://stackoverflow.com/Product/GetProduct/10">ProductName</a>. Domanda : mentre si utilizza l'helper del tag di ancoraggio, come possiamo ottenere il valore del parametro (ad esempio 10) utilizzando jquery? `
nam

3
@nam È possibile aggiungere un attributo di dati accanto all'helper ASP. <a asp-route-id="@item.Id" data-id="@item.Id" />e poi ottenere l'id con $('a').attr('data-id'):)
Steen Schütt

18

Potresti voler applicare la seguente sintassi.

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

Ciò produrrà il percorso di chiamata in questo modo.

/ Membro / Modifica / 3 / completo / 12

Quindi puoi riceverlo nel metodo mostrato di seguito.

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

Sebbene l'attributo che decora il metodo non sia richiesto in MVC, mostra più chiaramente come associare gli attributi dal collegamento ai parametri passati nel metodo.


Per me invece /Member/Edit/3/full/12genera/Member/Edit/3?type=full&id=12
Arif

1
@Arif Non posso dire con certezza perché e al momento non sono in un ambiente C # (troppo pigro per avviarne uno). Tuttavia, suggerirei che dipende dal fatto che stiamo affermando esplicitamente [FromUrl] o [FromQuery] ecc., Che potrebbero differire tra le diverse versioni del palatform .NET e / o dipendere dall'ereditarietà delle classi per le chiamate WebAPI pure (come al contrario delle classi per BaseController con viste e tutto il resto). Solo una guestimation, NB.
Konrad Viltersten,

0

se si desidera inserire l'ID variabile nel collegamento nella griglia o nella tabella, è possibile utilizzare qualcosa sotto il codice

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

Puoi spiegare la tua risposta? Le risposte di solo codice senza spiegazione tendono a essere sottovalutate o rimosse.
SS Anne
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.