Il controllo LinqDataSource ci permette di avvalerci della funzionalità di LINQ all'interno di una pagina ASP.NET ed effettuare query su fonti di dati enumerabili, come è possibile leggere dall'articolo di Andrea Zani sui nuovi controlli di ASP.NET 3.5.
Oltre alle note proprietà per identificare la classe di "contesto", la tabella (o proprietà pubblica) contenente le informazioni da selezionare ed eventuali opzioni di selezione, ordinamento e raggruppamento, il controllo LinqDataSource ci offre due eventi all'interno dei quali possiamo aggiungere un meccanismo personalizzato di gestione dei dati all'interno della cache della pagina.
Gli eventi in questione sono Selecting e Selected: il primo viene scatenato prima che venga eseguita l'operazione di select, mentre il secondo viene scatenato dopo che la medesima operazione è stata conclusa. L'oggetto che dobbiamo inserire in cache sarà la fonte di dati vera e propria dalla quale il controllo di selezione effettuerà la sua lettura, così da velocizzare le richieste successive alla pagina.
<asp:LinqDataSource ID="linqDSCache" runat="server" ContextTypeName="NorthwindDataContext" TableName="Customers" onselected="linqDSCache_Selected" onselecting="linqDSCache_Selecting" /> <asp:DropDownList ID="ddlCache" runat="server" DataSourceID="linqDSCache" DataTextField="ContactName" DataValueField="CustomerID" />
public partial class _Default : System.Web.UI.Page { private const string cachekey = "LinqDataSourceCacheSample"; protected void Page_Load(object sender, EventArgs e) {} protected void linqDSCache_Selecting(object sender, LinqDataSourceSelectEventArgs e) { object source = Cache[cachekey]; if (source == null) return; e.Result = source; } protected void linqDSCache_Selected(object sender, LinqDataSourceStatusEventArgs e) { object source = Cache[cachekey]; if (source != null) return; Cache.Insert(cachekey, e.Result, null, DateTime.Now.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration); } }
Quindi, prima dell'operazione di selezione viene prelevata la fonte di dati (se presente) dalla cache e viene eventualmente passata al controllo LinqDataSource, mentre alla fine della selezione stessa, tale oggetto viene inserito in cache (solo se non già presente).
La fonte di dati ci viene data dalla proprietà Result della classe LinqDataSourceSelectEventArgs, argomento dell'evento Selecting e viene successivamente salvato sempre tramite una proprietà chiamata Result, ma della classe LinqDataSourceStatusEventArgs, argomento dell'evento Selected.
Per approfondimenti:
I nuovi controlli di ASP.NET 3.5: LinqDataSource, ListView e DataPager
https://www.aspitalia.com/articoli/asp.net3.5/linqdatasource-listview-datapager.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Impostare il forward degli header in un sito ASP.NET Core dietro a un reverse proxy
Taggare la output cache in base al routing in ASP.NET Core
Definire la durata dell'output cache in ASP.NET Core 7
Cache policy su route groups di Minimal API in ASP.NET Core 7
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Catturare la telemetria degli eventi di output cache in ASP.NET Core
Gestire la query string nell'output cache di ASP.NET Core
Sfruttare l'output cache di ASP.NET Core 7 con i controller
Gestire dati sensibili nella configurazione in ASP.NET Core
Migrare un progetto ASP.NET Core da .NET 6 a .NET 7
Definire le impostazioni di cache a livello di controller in ASP.NET Core 7
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
I più letti di oggi
- Usare le variabili per personalizzare gli stili CSS
- Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
- Utilizzare gli asynchronous stream in Entity Framework Core 3
- Le novità di Entity Framework (Core) 7
- Gestire condizioni complesse in JavaScript
- Sottoscrizione agli eventi sul contenitore in JavaScript
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!