Este es el segundo de la serie de post sobre ASP.NET vNext que estoy haciendo.
Las releases vNext de .NET y Visual Studio incluyen toneladas de nuevas características y capacidades. Con ASP.NET vNext veremos un montón de mejoras tanto en Web Forms como en MVC – y también en el núcleo sobre el que están construidos.
El post de hoy es el primero de unos cuantos en el que hablaremos sobre algunas mejoras que van a venir en Web Forms. Veremos el nuevo soporte de controles de datos fuertemente tipados.
Antecedentes de las plantillas de controles de datos
ASP.NET Web Forms introdujo el concepto de “plantillas” desde la primera versión. Las plantillas nos permiten personalizar (o sobreescribir) el markup que se emite desde los controles de servidor, y son usados en expresiones de databinding.
Cuando usamos data-binding en una plantilla a día de hoy, usamos expresiones en tiempo de ejecución para enlazar a los datos. Por ejemplo, aquí estamos usando el método helper Eval() para enlazar las propiedades “FirstName” y “LastName” desde una lista de objetos enlazadas a un control repeater:
<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 realizamos un data binding en ambos sentidos, usamos el método helper Bind() de la siguiente manera:
<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>
Lo malo de este uso es que las llamadas a Eval() y a Bind() son de enlace retrasado – es decir pasamos strings para representar nombres de propiedades. Con esto no tenemos intellisense para los nombres, ni soporte para navegación de código (como Go To Definition), ni soporte de checking en tiempo de compilación.
Controles de servidor fuertemente tipados
La próxima release de ASP.NET ofrece la posibilidad de tener plantillas de datos fuertemente tipadas. Específicamente, hemos añadido la habilidad de declarar a qué tipo de dato se va a enlazar un control, a través de la nueva propiedad “ModelType” en controles de datos. Establecer esta propiedad hará que se generen dos nuevas variables tipadas en el ámbito de las expresiones de plantillas : Item y BindItem.
Los desarrolladores podrán usar estas variables en expresiones de data-binding y tener intellisense y soporte de checking en tiempo de compilación. Por ejemplo, en el siguiente código hemos seteado la propiedad ModelType de un control <asp:repeater> para que sea un objeto “Customer”. Una vez hecho esto podemos elegir usar Eval(“FirstName”) ó usar Item.FirstName para referenciar la propiedad.
Tenemos intellisense completo en Visual Studio cuando lo hacemos:
<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>
Si cometemos un error mientras escribimos, tendremos un feedback instantáneo del intellisense indicando que hay algo que no está muy bién:
Video de la característica
Damian Edwards tiene un video de 90 segundos en el que nos muestra los controles de datos fuertemente tipados en acción. Podéis verlo aquí.
Resúmen
El soporte para controles de datos fuertemente tipados es una pequeña pero importante característica que hace el trabajo con expresiones de enlaces de datos más fácil y limpio.En próximos post veremos algunas de las mejoras más sustanciales en cuanto a datos se refiere para Web Forms en ASP.NET vNext que hacen el trabjo con datos mucho más poderoso y fácil.
Espero que sirva.
Scott.
Traducido por: Juan María Laó Ramos.