Eu estou usando o dotnet core (2.1), só que Html.Action não existe. Nesse caso há alguma alternativa?
Eu estou usando o dotnet core (2.1), só que Html.Action não existe. Nesse caso há alguma alternativa?
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
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.