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>

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>

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.


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>

¿Puede explicar su respuesta? Las respuestas de solo código sin explicación tienden a ser rechazadas o eliminadas.
SS Anne
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.