Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Html.Action no .net core

Eu estou usando o dotnet core (2.1), só que Html.Action não existe. Nesse caso há alguma alternativa?

2 respostas

Olá Bruno,

realmente retiraram o Html.Action no core, a ideia deles é trabalhar mais com o que chamam de view components agora. A ideia é ao invés da View chamar para uma action que retornava um HTML, você chamará na verdade uma classe que herda de ViewComponent . Ela que fará este trabalho que antes era da action.

No fundo, não muda muita coisa. Mas uma das principais diferenças é que no caso da ViewComponent o ciclo de vida da requisição dentro do mvc do core não aplica os filtros.

Vamos supor por exemplo então que no .net framework eu tinha uma action invocada pelo Html.Action que gerava um menu da página. No core você poderia ter uma classe assim:

public class MenuViewComponent : ViewComponent
{

    public async Task<IViewComponentResult> InvokeAsync()
    {
        //lógica necessária para gerar menu
        return View();
    }

}

Aí você pode invocar esta view component no cshtml tanto via html helper:

@await Component.InvokeAsync("Menu")

quanto via tag helper:

@addTagHelper *, MyWebApp
...
<vc:menu></vc:menu>

Aqui tem um tutorial da microsoft mostrando em mais detalhes como trabalhar com isso, inclusive passando parâmetros para o componente: https://docs.microsoft.com/pt-br/aspnet/core/mvc/views/view-components?view=aspnetcore-2.1

solução!

Entendi, eu estava lendo sobre isso e vi que nesse caso a saída é mesmo o que você disse.

Obrigadão pela ajuda e já vou testar isso agora.