[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:

  1. No es fácil recordar como se llaman todas las propiedades de nuestras clases o entidades.
  2. 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

eval

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á:

error

Mola! ¿no?

Un saludo.

Published 2/9/2011 8:46 por Luis Ruiz Pavón
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2011/09/02/asp-net-vnext-strongly-typed-data-controls-no-m-225-s-eval-y-bind.aspx

Comentarios

# [ASP.NET vNext] Model Binding: Obteniendo datos

Siguiendo con la serie de novedades que Scott Guthrie está publicando sobre ASP.NET vNext , esta vez

Tuesday, September 06, 2011 11:05 AM por Amigo mío Siempre estas Programando en .NET