[ASP.NET vNext] Strongly Typed Data Controls, No más Eval y Bind!
Siguiendo con la serie de post que Scott Guthrie está escribiendo en su blog, seguro que los que habéis trabajado con ASP.NET conocéis fijo las templates de los controles de ASP.NET ¿verdad? y sino pues las templates de controles de datos basicamente nos permiten modificar o customizar el HTML que emiten al cliente usando expresiones de databinding como Eval y Bind, algo como esto:
Eval
Para solo mostrar la información hacemos uso de Eval One-Way-Binding
<asp:GridView ID="grv_Mensajes" runat="server" AutoGenerateColumns="False" AllowPaging="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblTitulo" runat="server" Text='<%# Eval("Titulo") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblDescripcion" runat="server" Text='<%# Eval("Descripcion") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Bind
Para mostrar y modificar la información usamos Bind Two-Way-Binding
<asp:FormView ID="FormCustomer" runat="server" >
<EditItemTemplate>
<div>
Título:
<asp:TextBox ID="txtTitulo" runat="server" Text='<%# Bind("Titulo") %>' />
</div>
<div>
Descripción:
<asp:TextBox ID="txtDescripcion" runat="server" Text='<%# Bind("Descripcion") %>' />
</div>
<asp:Button runat="server" CommandName="Update" />
</EditItemTemplate>
</asp:FormView>
¿Cual es el problema de esto?
Hay 2 problemas con esto desde mi punto de vista:
- No es fácil recordar como se llaman todas las propiedades de nuestras clases o entidades.
- En la vista HTML no disponemos de Intellisense para los Data Controls y es posible que al escribir el nombre del campo mal, en tiempo de ejecucuión nos salte una excepción.
Para evitar esto y facilitarnos un poco más la vida, en la próxima versión de ASP.NET tendremos los Strongly Typed Data Controls

Como se aprecia en la imagen haciendo uso del atributo ModelType le indicamos al control cual será la clase de nuestro modelo con la que vamos a trabajar y ya tenemos disponible en el intellisense todos los campos. El Item es equivalente al método Eval
El equivalente al método Bind es BindItem
<asp:FormView ID="FormCustomer" runat="server" >
<EditItemTemplate>
<div>
Título:
<asp:TextBox ID="txtTitulo" runat="server" Text='<%# BindItem.Titulo %>' />
</div>
<div>
Descripción:
<asp:TextBox ID="txtDescripcion" runat="server" Text='<%# BindItem.Descripcion %>' />
</div>
<asp:Button runat="server" CommandName="Update" />
</EditItemTemplate>
</asp:FormView>
Si nos equivocamos en el nombre del campo, en tiempo de diseño el Intellisense de Visual Studio nos avisará:

Mola! ¿no?
Un saludo.