Como adicionar parâmetro de link para auxiliares de tag asp no ASP.NET Core MVC

104

Tenho muita experiência com ASP.NET MVC 1-5 . Agora eu aprendo ASP.NET Core MVC e tenho que passar um parâmetro para vincular na página. Por exemplo, tenho a seguinte ação

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

Como posso implementar o link para esta ação usando ajudantes de tag?

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

Respostas:

195

Você pode usar o prefixo de atributo asp-route-para prefixar os nomes das variáveis ​​de rota.

Exemplo:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>
Alex
fonte
2
Se eu tiver vários parâmetros, devo adicionar tudo com este método?
Elvin Mammadov de
40
@ elvin-mammadov, sim, usando asp-route-yourParamName, por exemplo:asp-route-foo="bar"
Alex
2
@ElvinMammadov Seu comentário asp-route-yourParamNamesobre parâmetros de entrada adicionais foi muito útil. Obrigado.
nam
@Alex Seu exemplo irá gerar o html como: <a href="https://stackoverflow.com/Product/GetProduct/10">ProductName</a>. Pergunta : Ao usar o auxiliar de tag âncora, como podemos obter o valor do parâmetro (por exemplo, 10) usando jquery? `
nam
3
@nam Você pode adicionar um atributo de dados próximo ao auxiliar ASP. <a asp-route-id="@item.Id" data-id="@item.Id" />e obter o id com $('a').attr('data-id'):)
Steen Schütt
18

Você pode querer aplicar a seguinte sintaxe.

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

Isso produzirá uma rota de chamada como esta.

/ Membro / Editar / 3 / full / 12

Então você pode recebê-lo no método conforme mostrado abaixo.

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

Embora o atributo que decora o método não seja obrigatório no MVC, ele mostra mais claramente como vincular os atributos do link aos parâmetros passados ​​no método.

Konrad Viltersten
fonte
Para mim, em vez disso /Member/Edit/3/full/12, gera/Member/Edit/3?type=full&id=12
Arif
1
@Arif Não posso dizer ao certo por que e não estou em um ambiente C # no momento (com preguiça de iniciar um também). No entanto, sugiro que depende se estamos declarando explicitamente [FromUrl] ou [FromQuery] etc., o que pode diferir entre as diferentes versões da palatform .NET e / ou depender de classes herdadas para chamadas WebAPI puras (como oposto às classes para BaseController com visualizações e tudo isso). Apenas uma avaliação, NB.
Konrad Viltersten
0

se você quiser colocar o id da variável no link na grade ou tabela algo abaixo do código pode ser usado

[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
fonte
Você pode explicar sua resposta? Respostas somente de código sem explicação tendem a ser rejeitadas ou removidas.
SS Anne