1
resposta

Enviar t dados completos via tagHelper para o controller.

Olá!! Atualmente estou enviando somente um dado para o controller via tagHelper:

 <a asp-controller="ClientesERP" asp-action="ConfirmarDelete" class="btn glyphicon glyphicon-user" asp-route-id="@item.id"> Apagar</a>

Como faço para enviar todos os dados para o Controller? Tentei:

 <a asp-controller="Clientes" asp-action="ConfirmarDelete" class=" btn glyphicon glyphicon-user" asp-route-id="@item"> Apagar</a>

Mas não funcionou!!

1 resposta

Olá, Rene

Essa "feature" já foi solicitada para o time do MVC:

https://github.com/aspnet/Mvc/issues/3875

Porém, o time do MVC disse que não há está nos planos colocar isso na plataforma.

O jeito é implementar via @Url.Action() e passando o objeto:

<a href="@Url.Action("ConfirmarDelete", new { item = item })">About</a>

Um outro jeito ainda seria serializar via Json, mas fica com cara de "gambiarra", pois você vai ter que de-serializar no lado do servidor:

asp-route-item="@Html.Raw(Json.Serialize(item))"

Outra maneira seria adicionar parâmetro de rota.

Para definir um novo parâmetro de rota, você pode criar mais um atributo asp-route- seguido do nome do parâmetro.

Veja que abaixo eu adicionei o parâmetro categoria.

<a asp-action="carrinho"
   asp-route-codigo="@produto.Codigo"
   asp-route-categoria="@produto.Subcategoria.Id"
   class="btn btn-success">Adicionar</a>

Essa nova informação de categoria é passada através da rota do ASP.NET Core. Então você precisa definir em uma das rotas (não precisa ser na rota default) a informação a mais (categoria).

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Pedido}/{action=Carrossel}/{codigo?}/{categoria?}");
});