[ASP.NET vNext] Controles de Enlace a Datos fuertemente tipados–Web Forms no muere.
Hola que tal, tal cual dice el titulo del post, WebForms No Muere, dilucidando algunas dudas sobre si ASP.NET WebForm llegaba a su fin. Escuché a varios que alguna vez apoyaron bastante a Webforms, criticarlo y hasta satanizarlo, particularmente se que tiene pros y contra, pero aprovecho más sus pros para mi trabajo diario.
Bueno, luego de esa pequeña opinión, veamos una excelente característica que apunta a facilitarnos el desarrollo de nuestras aplicaciones. Seguramente vienen más novedades, las cuales está entregando el Maestro ScottGu’s en su blog, este post es un resumen-traducción de http://weblogs.asp.net/scottgu/archive/2011/09/01/strongly-typed-data-controls-asp-net-vnext-series.aspx
Veamos como se realiza el enlace a datos en las plantillas de los DataControls
ASP.NET Web Forms introduce el concepto de “plantillas”, estas plantillas nos permiten customizar el contenido de los tag generados por el webcontrol, y típicamente es usado con las expresiones data-binding.
Cuando actualmente utilizamos el data-binding junto a las plantillas, estamos utilizando expresiones lata-bound, es decir, la unión con los datos se hace en tiempo de ejecución en el momento de el render del control. Por ejemplo, a continuación se utiliza el método helper Eval() para enlazar las propiedades “FirstName” y “LastName” de una lista de objetos enlazados a control de repetición.
<ul>
<asp:Repeater runat="server" ID="customers">
<ItemTemplate>
<li>
First Name: <%# Eval("FirstName") %><br />
Last Name: <%# Eval("LastName") %><br />
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
Cuando se lleva a cabo la unión de los datos con posibilidad de actualización es decir “2-way data-binding”, usamos el método helper Bind().
<asp:FormView ID="editCustomer" runat="server" >
<EditItemTemplate>
<div>
First Name:
<asp:TextBox ID="firstName" runat="server" Text='<%# Bind("FirstName") %>' />
</div>
<div>
Last Name:
<asp:TextBox ID="lastName" runat="server" Text='<%# Bind("LastName") %>' />
</div>
<asp:Button runat="server" CommandName="Update" />
</EditItemTemplate>
</asp:FormView>
La desventaja de ambos métodos es que las llamadas a eval() y Bind() son en tiempo de ejecución, lo que significa que se pasan como argumentos cadenas de texto (strings) para representar el nombre de las propiedades, lo que se traduce a que no hay intellisense para los nombres de las propiedades del objeto enlazado, tampoco apoyo a la navegación de código (como ir a la definición), ni menos, la comprobación en tiempo de compilación.
Controles de Datos fuertemente tipados
La próxima versión de ASP.NET proporciona la capacidad para permitir plantillas fuertemente tipadas. En concreto, se ha añadido la posibilidad de declarar el tipo de datos que será bindeado con la plantilla, mediante la nueva propiedad “ModelType”. Al establecer esta propiedad habrá dos nuevas variantes en el ámbito de las expresiones de enlace de datos en las plantillas: Item y BindItem.
Los desarrolladores pueden usar estas variables en las expressiones de enlace a datos y obtener comprobación en tiempo de compilación e Intellinsense. Por ejemplo, a continuación, se muestra un ejemplo en donde se a seteado la propiedad ModelType en un control <asp:repeater> a un objeto “Customer”. Una vez que esta propiedad ya esta seteada podemos cambiar el codigo Eval(“FirstName”) por Item.FirstName para hacer referencia a la propiedad.

Para las expresiones “2-way data-binding”, podemos utilizar la otra variable, BindItem para obtener los mismos beneficios que se mencionaron anteriormente.
<asp:FormView ID="editCustomer" runat="server">
<EditItemTemplate>
<div>
First Name:
<asp:TextBox ID="firstName" Text='<%# BindItem.FirstName %>' runat="server" />
</div>
<div>
Last Name:
<asp:TextBox ID="lastName" Text='<%# BindItem.LastName %>' runat="server" />
</div>
<asp:Button runat="server" CommandName="Update" />
</EditItemTemplate>
</asp:FormView>
Y si tenemos un error al escribir el código, inmediatamente vamos a obtener el aviso del error desde el motor de Intellinsense.

Un video rápido que muestra estas características en acción:
http://www.asp.net/vnext/videos/aspnet-vnext-videos-strongly-typed-data-controls
Esperemos los siguientes post del Master Scottgu en donde nos presenta estas interesantes novedades.
Saludos!
Chalalo