[ASP.NET vNext] Model Binding: Obteniendo datos

Siguiendo con la serie de novedades que Scott Guthrie está publicando sobre ASP.NET vNext, esta vez toca algo que han añadido a WebForms y que viene de su hermano pequeño MVC, el Model Binding.

Si habéis trabajado con las versiones anteriores de ASP.NET el tema del binding es algo que no acaba de convencer en lo que se refiere a tener
nuestra propia capa de datos (Repository pattern por ejemplo) y escribir lógica de negocio (Servicios) que hace uso de esta capa y a su vez
tener los controles de datos en ASP.NET que hagan uso de esta lógica a través de un patrón MVP.

Sí es cierto que con el control ObjectDataSource la cosa mejoró un poco, pero sigue siendo insuficiente porque no soporta binding para tipos complejos.

El Model Binding

El Model Binding es una evolución del binding que ya disponíamos en versiones anteriores de ASP.NET y nos a va a permitir trabajar con los controles de datos de manera más simple y más limpia.

Mirar el siguiente ejemplo que muestra Scott en su página:

<asp:GridView ID="categoriesGrid" runat="server" ModelType="WebApplication1.Model.Category"
    SelectMethod="GetCategories" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="CategoryID" HeaderText="ID" />
        <asp:BoundField DataField="CategoryName" HeaderText="Name" />
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:TemplateField HeaderText="# of Products">
            <ItemTemplate><%
   1: # Item.Products.Count 
%></ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Hay 3 cosas importatntes que resaltar:

La primera es el uso del atributo ModelType del que habalmos en este post para ofrecer strongly-typed data-binding en la vista.

La segunda es el atributo SelectMethod, en el que podemos especificarle un método de nuestro code behind desde donde obtendrá la información (Model Binding) que en este caso es del métiodo:

public IQueryable<Category> GetCategories() {
    var northwind = new Northwind();
    return northwind.Categories.Include(c => c.Products);
}

Si nos fijamos, el método GetCategories se hace uso del método extensor Include que indica a EF que además de traerse la información de la categoría se traiga también los productos relacionados. Luego en el templatefield tenemos la propiedad Item.Products.Count y ese es el tipo de binding complejo del que antes hablabamos y que requería codificación extra por nuestra parte para escenarios de este tipo.

Otra cosa que hay que resaltar del método GetCategories es que devuelve un IQueryable<T> que habilita la ejecución diferida (Mira este post que escribí hace un tiempo) y que es muy util para controles que soportan paginación y ordenación, porque le va a permitir aplicar la ordenación y la páginación antes de ejecutarse. Te preguntarás ¿Y en que nos ayuda esto? Pues que ahora la páginación y la ordenación es algo muy sencillo de implementar, basta con poner los atributos AllowSorting y AllowPaging a true el PageSize a el tamaño que tu quieras:

<asp:GridView ID="categoriesGrid" runat="server" AutoGenerateColumns="false"
    AllowSorting="true" AllowPaging="true" PageSize="5"
    ModelType="WebApplication1.Model.Category" 
    SelectMethod="GetCategories">
    <Columns>
        <asp:BoundField DataField="CategoryID" HeaderText="ID" SortExpression="CategoryID" />
        <asp:BoundField DataField="CategoryName" HeaderText="Name" SortExpression="CategoryName" />
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:TemplateField HeaderText="# of Products">
            <ItemTemplate><%
   1: # Item.Products.Count 
%></ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Y tachán:

image_thumb_5EEAFDD8

La verdad es que todas las novedades que están incluyendo para la nueva versión de ASP.NET prometen mucho, yo espero que se pongan las pilas en el tema de las validaciones y tomen nota también de su hermano pequeño, porque los validators de ASP.NET son un verdadero infierno.

Hasta la próxima!!!

Published 6/9/2011 11:05 por Luis Ruiz Pavón
Archivado en: ,
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2011/09/06/asp-net-vnext-model-binding-obteniendo-datos.aspx

Comentarios

# [ASP.NET vNext] Model Binding: Actualizando datos (Ya tenemos Data Annotations!)

Menudo notición viendo el nuevo video de ASP.NET vNext!!! El otro día comentaba en este post que a ver

Wednesday, September 14, 2011 9:59 AM por Amigo mío Siempre estas Programando en .NET