Ho un controllo utente Web, serve alcuni calcoli di dati potenzialmente intensi e vorrei che venisse salvato nella cache in modo che ogni visualizzazione di pagina non ricalcoli i dati . Risiede su pagine viste molto frequentemente quindi è abbastanza importante che funzioni correttamente!ASP.net Come eseguire l'output cache di un webusercontrol su controlli proprietà pubbliche
per il contesto, è utilizzato nel nostro Arcade: http://www.scirra.com/arcade/action/93/8-bits-runner
Clicca sulle statistiche, i dati per i grafici e le statistiche sono generati da questo webusercontrol.
L'inizio del controllo è la seguente:
public partial class Controls_Arcade_Data_ArcadeChartData : System.Web.UI.UserControl
{
public int GameID { get; set; }
public Arcade.ChartDataType.ChartType Type { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
Ora la difficoltà che sto avendo è la cache di output deve essere dipende sia dalla GamID e ChartType.
Questo controllo viene riutilizzato con molte combinazioni diverse di GameID e Tipi, ho bisogno di creare una cache per ognuno di questi, ma sto cercando di capire come farlo.
Per esempio, un gioco arcade potrebbe passare in GameID = 93
e Type = GraphData
, un altro potrebbe essere GameID = 41
e Type = TotalPlaysData
e un altro potrebbe essere GameID = 93
ma Type = TotalPlaysData
. Questi dovrebbero tutti restituire dati diversi e avere differenti cache di output.
Il controllo viene utilizzato nella pagina giochi specie come questo (i parametri sono effettivamente impostati nel codebehind)
<div>Total Plays:</div>
<div class="count"><Scirra:ArcadeChartData runat="server" GameID="93" Type="TotalPlays" /></div>
<br /><br />
<div>Total Guest Plays:</div>
<div class="count"><Scirra:ArcadeChartData runat="server" GameID="93" Type="TotalGuestPlays" /></div>
etc.
Qualsiasi aiuto apprezzato! Ho passato un po 'di tempo a guardare online e continua a venire come qualcosa che ho bisogno di risolvere, ma non riesco a capirlo.
Modifica
Edit: Ho provato ad aggiungere questa riga al mio controllo: <% @ OutputCache Duration = "20" VaryByControl = "GameID; Tipo" %>
Ma solo genera l'errore Object reference not set to an instance of an object.
sulla riga in cui GameID
viene impostato per la prima volta nella pagina ASPX utilizzando il controllo.
poiché desidera utilizzare il controllo più volte nella stessa pagina, questa soluzione non è valida. non può avere lo stesso ID per più controlli all'interno della stessa pagina. –
È OK utilizzare ID diversi sulla stessa pagina; è sufficiente tenere presente che l'ID fa parte della cache key, quindi è possibile ottenere più copie dello stesso output. Se Type è sempre impostato in base alla posizione del controllo sulla pagina, come nella domanda, potrebbe non essere un problema. – RickNZ
Sembra funzionare come voglio! Testerà ancora un po 'e riferirà. –