Grazie al model binding di ASP.NET Web Forms, introdotto nella versione 4.5, diventa assolutamente semplice gestire le dipendenze tra i vari oggetti in pagina, o più in generale con il contesto di richiesta, per quanto riguarda il caricamento dei dati.
Immaginiamo, ad esempio di avere una DropDownList che mostra l'elenco di nazioni, e una GridView, all'interno della quale vogliamo mostrare i clienti della nazione selezionata:
<asp:DropDownList runat="server" ID="countriesList" SelectMethod="GetCountries" AutoPostBack="true" AppendDataBoundItems="true"> <asp:ListItem Value="">-- Seleziona --</asp:ListItem> </asp:DropDownList> <asp:GridView runat="server" ID="TheGrid" ItemType="WebApplication9.Customer" SelectMethod="TheGrid_GetData" AutoGenerateColumns="false" AllowPaging="true"> <Columns> ... </Columns> </asp:GridView>
Come possiamo notare, countriesList sfrutta un SelectMethod denominato GetCountries, che restituisce un IQueryable
public IQueryable<string> GetCountries() { return _context.Customers .Select(x => x.Country) .Distinct() .OrderBy(x => x); }
Per quanto riguarda invece il caricamento dei dati della griglia, in questo caso il SelectMethod accetta un parametro country da utilizzare per filtrare la query:
public IQueryable<Customer> TheGrid_GetData ([Control("countriesList")]string country) { return _context.Customers .Where(x => x.Country == country) .OrderBy(x => x.CompanyName); }
Il metodo TheGrid_GetData, dal punto di vista meramente implementativo, è assolutamente banale e non merita particolari commenti. Ciò che è interessante, invece, è il legame del parametro country con l'elemento selezionato di countriesList, grazie all'attributo ControlAttribute.
Esistono diversi parametri di questo tipo, che possiamo sfruttare per controllare i parametri sui metodi di binding e collegarli a query string, session, cookie, ecc. Per esempio, immaginiamo di aver definito una route nell'applicazione per la pagina di dettaglio di un customer:
routes.MapPageRoute("customer-details", "Customers/{id}", "~/Details.aspx");
Nella griglia possiamo inserire un link alla pagina di dettaglio, basato sull'ID del customer corrente, con una semplice template column:
<asp:TemplateField> <ItemTemplate> <asp:HyperLink ID="HyperLink1" runat="server" Text="<%# Item.CompanyName %>" NavigateUrl='<%# GetRouteUrl("customer-details", new { id = Item.CustomerID }) %>' /> </ItemTemplate> </asp:TemplateField>
La pagina Details.aspx contiene una DetailsView per mostrare il dettaglio del customer:
<asp:DetailsView runat="server" ID="CustomerDetails" ItemType="WebApplication9.Customer" SelectMethod="Details_GetItem" />
Anche in questo caso abbiamo sfruttato un SelectMethod, che accetta come parametro un identificativo, che dovrà essere prelevato dai dati di routing. La logica di base non cambia, e l'unica differenza è il differente attributo da utilizzare:
public Customer Details_GetItem([RouteData]string id) { using (var context = new NorthwindEntities()) { return context.Customers.Find(id); } }
Come possiamo notare, insomma, grazie al nuovo model binding introdotto in ASP.NET Web Forms dalla recente release 4.5, possiamo scrivere codice in maniera davvero naturale, e collegarlo facilmente alle diverse dipendenze.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Potenziare la ricerca su Cosmos DB con Full Text Search
Recuperare l'ultima versione di una release di GitHub
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Creare una libreria CSS universale: Immagini
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Eseguire query in contemporanea con EF
Simulare Azure Cosmos DB in locale con Docker
Escludere alcuni file da GitHub Secret Scanning
Applicare un filtro per recuperare alcune issue di GitHub
Introduzione ai web component HTML
Gestione dei nomi con le regole @layer in CSS
Creare una libreria CSS universale: Clip-path
I più letti di oggi
- Rilasciata la versione RTW di Entity Framework 4.1
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare azurite come simulatore di Azure Storage