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
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Utilizzare Azure AI Studio per testare i modelli AI
Gestire il colore CSS con HWB
Creare una libreria CSS universale: Clip-path
Utilizzare WhenEach per processare i risultati di una lista di task
Usare il colore CSS per migliorare lo stile della pagina
Utilizzare Copilot con Azure Cosmos DB
Gestire la cancellazione di una richiesta in streaming da Blazor
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Creare un webhook in Azure DevOps
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps