Continuando la nostra esplorazione delle novità Visual Studio 11 (vNext) (qui la seconda parte) incontriamo migliorie e nuove funzionalità anche nel complesso campo del Data Binding. Come abbiamo già visto nel post precedente, in Visual Studio vNext potremo scrivere le espressioni di binding con l'aiuto dell'IntelliSense e quindi in modalità Strongly-Typed, ovvero senza rischio di errori di scrittura e senza la necessità di conoscere a memoria le proprietà degli oggetti.
Oltre a questo, vNext porterà con se anche un concetto totalmente nuovo di Data Binding, ovvero il Model Binding (ereditato da ASP.NET MVC). In pratica per Model Binding si intende un approccio al data binding focalizzato sul codice. Il Model Binding consente infatti di scrivere i nostri metodi per realizzare le quattro operazioni fondamentali sui dati (CRUD) e di associarli facilmente ai controlli server i quali, dal loro canto, sapranno fare buon uso di questi metodi richiamandoli quando opportuno nell'ambito del ciclo di vita della pagina ASP.NET.
Vediamo un esempio che vale più di mille parole:
<asp:GridView ID="gvProducts" runat="server" ModelType="MyApp.Product" SelectMethod="GetProducts" AutoGenerateColumns="false"> <Columns> <asp:BoundField DataField="ID" HeaderText="ID" /> <asp:BoundField DataField="Name" HeaderText="Nome" /> <asp:BoundField DataField="Description" HeaderText="Descrizione" /> <asp:TemplateField HeaderText="Venduti"> <ItemTemplate><%# Item.Orders.Count %></ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
In questo caso abbiamo una GridView che visualizza l'elenco dei prodotti con il numero di pezzi venduti. Come vediamo abbiamo valorizzato la proprietà ModelType affinchè potessimo utilizzare la nuova modalità di scrittura delle espressioni di binding che utilizza l'oggetto Item. Poi vediamo che la proprietà SelectMethod è stata valorizzata con il metodo GetProducts che troviamo nel code behind della pagina:
public IQueryable<Product> GetProducts() {
var dbECommerce = new dbECommerce();
return dbECommerce.Products.Include(o => o.Orders);
}
In questo caso specifico utilizziamo Entity Framework per recuperare l'elenco dei prodotti e contestualmente diciamo anche, con Products.Include che vogliamo recuperare anche le informazioni sugli ordini di ciascun prodotto.
In pratica, come vediamo, non è più necessario utilizzare un oggetto Data Source intermedio come SqlDataSource od ObjectDataSource perchè con il nuovo Model Binding i server controls sono in grado autonomamente di richiamare i metodi helpers preposti alla gestione dei dati.