Cómo agregar un parámetro de vínculo a los ayudantes de etiquetas asp en ASP.NET Core MVC

104

Tengo mucha experiencia con ASP.NET MVC 1-5 . Ahora aprendo ASP.NET Core MVC y tengo que pasar un parámetro para vincular en la página. Por ejemplo, tengo la siguiente acción

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

¿Cómo puedo implementar el enlace para esta acción con ayuda de etiquetas?

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

Respuestas:

195

Puede utilizar el prefijo de atributo asp-route-para prefijar los nombres de las variables de ruta.

Ejemplo:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>
Alex
fuente
2
Si tengo varios parámetros, ¿debo agregar todo con este método?
Elvin Mammadov
40
@ elvin-mammadov, sí, usando asp-route-yourParamName, por ejemplo:asp-route-foo="bar"
Alex
2
@ElvinMammadov Su comentario asp-route-yourParamNamesobre parámetros de entrada adicionales fue muy útil. Gracias.
nam
@Alex Su ejemplo generará el código HTML como: <a href="https://stackoverflow.com/Product/GetProduct/10">ProductName</a>. Pregunta : Mientras usamos el asistente de etiquetas de anclaje, ¿cómo podemos obtener el valor del parámetro (por ejemplo, 10) jquery? `
nam
3
@nam Puede agregar un atributo de datos junto al asistente ASP. <a asp-route-id="@item.Id" data-id="@item.Id" />y luego obtenga la identificación con $('a').attr('data-id'):)
Steen Schütt
18

Es posible que desee aplicar la siguiente sintaxis.

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

Eso producirá la ruta de llamada como esta.

/ Miembro / Editar / 3 / completo / 12

Entonces puede recibirlo en el método que se muestra a continuación.

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

Aunque el atributo que decora el método no es necesario en MVC, muestra más claramente cómo vincular los atributos del enlace a los parámetros pasados ​​en el método.

Konrad Viltersten
fuente
Para mí en lugar de /Member/Edit/3/full/12genera/Member/Edit/3?type=full&id=12
Arif
1
@Arif No puedo decir con certeza por qué y no estoy en un entorno C # en este momento (demasiado vago para iniciar uno también). Sin embargo, sugeriría que depende de si estamos declarando explícitamente [FromUrl] o [FromQuery] , etc., que pueden diferir entre las diferentes versiones de .NET palatform y / o depender de clases heredadas para llamadas puras a WebAPI (como opuesto a las clases para BaseController con vistas y todo eso). Solo una animación, NB.
Konrad Viltersten
0

si desea poner una identificación de variable en el enlace en la cuadrícula o tabla, se puede usar algo debajo del código

[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
fuente
¿Puede explicar su respuesta? Las respuestas de solo código sin explicación tienden a ser rechazadas o eliminadas.
SS Anne