ASP.NET 5 – Explorando as TagHelpers com MVC 6

Standard

Um novo recurso que está sendo incorporado ao ASP.NET 5 é o conceito de TagHelpers. Assim como todo o projeto do ASP.NET (que agora é open-source) está ainda em desenvolvimento, os recursos e features das TagHelpres também estão, desta forma ainda não existe um pacote definido e muito provavelmente sofrerá alterações até a versão final.

Estou considerando a publicação do Scott Hanselman como base para este artigo, porém, no final exponho minha opinião e como acho que tudo isso deveria funcionar.

Resumidamente, TagHelpers nos fornecem uma nova forma de criação de tags customizáveis (que podem ser sync ou async) para marcação de código em nossas views. Hoje em dia, o recurso que possuímos no ASP.NET MVC mais parecido com isso é o conceito de HtmlHelpers.

Veja abaixo um exemplo (retirado do próprio site do Hanselman) de como ficaria a diferença entre criar um link utilizando HtmlHelpers e utilizando TagHelpers:

HtmlHelpers

1
<li>@Html.ActionLink("Home", "Index", "Home")</li>

TagHelpers

1
<li><a controller="Home" action="Index">Home</a></li>

Aparentemente ficou mais limpo nosso código, porém, como falei acima, tudo isso ainda está em desenvolvimento e poderá sofrer alterações, inclusive existe uma Issue aberta no GitHub do projeto expondo algumas opiniões a respeito do uso destes atributos (no exemplo acima seriam controller e action estes atributos) entre usa-los com um prefixo, como por exemplo asp-controller ou da forma acima demonstrada. Veja, estão sendo utilizados como marcação HTML, porém, quem irá interpreta-los será o ASP.NET.

Você, inclusive pode opinar também, lembre-se que estamos falando do futuro da tecnologia que utilizamos em nosso dia a dia. Como você gostaria de ver isso implementado? Exponha sua opinião também! Abaixo vou apresentar a minha.

Considerações

Eu gostei bastante da feature, nos dará uma marcação mais limpa e enxuta. Sem contar que teremos mais controle e recursos, como por exemplo, para trabalharmos de forma assíncrona na renderização de widgets, criar nossas próprias tags customizadas, etc.
Porém, tenho algumas opiniões:

– Acho que seria muito mais vantajoso trabalharmos com prefixos, por exemplo asp-controller ou asp:controller. Um simples exemplo de problema poderia haver no próprio exemplo acima, imagine se quiséssemos incluir um id a ser enviado para nossa Action, ficaria assim:

1
<li><a controller="Home" action="Index" id="@Model.Id">Home</a></li>

Porém, como saberíamos se isso é um atributo customizado ou o próprio id do link?
Se houvesse um prefixo isso seria resolvido, veja:

1
<li><a asp-controller="Home" asp-action="Index" asp-id="@Model.Id">Home</a></li>

– Outro ponto importante é a possibilidade de criarmos nossa própria marcação para prefixos, para não ficarmos refém de utilizar sempre asp- ou asp: por exemplo.

– Uma coisa fantástica é a possibilidade de sabermos se o nome de um Controller foi alterado para não haver links quebrados.

Enfim, embora tudo isso seja novo, já existe muita coisa por aí para estudarmos e nos atualizarmos, veja abaixo alguns links importantes sobre o assunto:

http://www.hanselman.com/blog/ASPNET5VNextWorkInProgressExploringTagHelpers.aspx
http://www.jeffreyfritz.com/2014/11/get-started-with-asp-net-mvc-taghelpers/
http://www.jeffreyfritz.com/2014/11/asp-net-tag-helpers-the-basics/

Issue sobre a criação de prefixos nas TagHelpers
https://github.com/aspnet/Razor/issues/88

Leave a Reply

Your email address will not be published. Required fields are marked *