Condividi tramite


ControlCachePolicy Classe

Definizione

Fornisce l'accesso a livello di codice alle impostazioni della cache di output di un controllo utente ASP.NET.

public ref class ControlCachePolicy sealed
public sealed class ControlCachePolicy
type ControlCachePolicy = class
Public NotInheritable Class ControlCachePolicy
Ereditarietà
ControlCachePolicy

Esempio

Nell'esempio di codice seguente viene illustrato il modo in cui un controllo utente può essere caricato in modo dinamico e modificato a livello di codice in fase di esecuzione. L'attributo PartialCachingAttribute viene applicato a un controllo utente denominato SimpleControl, il che significa che il controllo utente viene sottoposto a wrapping da un PartialCachingControl controllo in fase di esecuzione. Le SimpleControl impostazioni di memorizzazione nella cache dell'oggetto possono essere modificate a livello di codice tramite l'oggetto PartialCachingControl associatoControlCachePolicy, disponibile tramite un riferimento al controllo che lo esegue a capo. In questo esempio, la proprietà viene esaminata durante l'inizializzazione Duration della pagina e modificata utilizzando i SetSlidingExpiration metodi e SetExpires se vengono soddisfatte alcune condizioni.

<%@ Page Language="C#" %>
<%@ Reference Control="SimpleControl.ascx" %>
<script language="C#" runat="server">

// The following example demonstrates how to load a user control dynamically at run time, and
// work with the ControlCachePolicy object associated with it.

// Loads and displays a UserControl defined in a seperate Logonform.ascx file.
// You need to have "SimpleControl.ascx" file in 
// the same directory as the aspx file. 

void Page_Init(object sender, System.EventArgs e) {
    
    // Obtain a PartialCachingControl object which wraps the 'LogOnControl' user control.
    PartialCachingControl pcc = LoadControl("SimpleControl.ascx") as PartialCachingControl;        
    
    // If the control is slated to expire in greater than 60 Seconds
    if (pcc.CachePolicy.Duration > TimeSpan.FromSeconds(60) ) 
    {        
        // Make it expire faster. Set a new expiration time to 30 seconds, and make it
        // an absolute expiration if it isnt already.        
        pcc.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(30)));
        pcc.CachePolicy.SetSlidingExpiration(false);
    }                    
    Controls.Add(pcc);
}
</script>
<%@ Page Language="VB" %>
<%@ Reference Control="SimpleControl.ascx" %>
<script language="VB" runat="server">

    ' The following example demonstrates how to load a user control dynamically at run time, and
    ' work with the ControlCachePolicy object associated with it.

    ' Loads and displays a UserControl defined in a seperate Logonform.ascx file.
    ' You need to have "SimpleControl.ascx" file in 
    ' the same directory as the aspx file. 

    Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
    
        ' Obtain a PartialCachingControl object which wraps the 'LogOnControl' user control.
        Dim pcc As PartialCachingControl
        pcc = LoadControl("SimpleControl.ascx")
    
        ' If the control is slated to expire in greater than 60 Seconds
        If (pcc.CachePolicy.Duration > TimeSpan.FromSeconds(60)) Then
            ' Make it expire faster. Set a new expiration time to 30 seconds, and make it
            ' an absolute expiration if it isnt already.        
            pcc.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(30)))
            pcc.CachePolicy.SetSlidingExpiration(False)
        End If
        Controls.Add(pcc)
    End Sub
</script>

Nell'esempio di codice seguente viene illustrato l'utilizzo del SimpleControl controllo utente da una pagina Web Form. Per eseguire correttamente questo esempio, verificare che il file di controllo utente (con estensione ascx), il relativo file code-behind (.cs o .vb) e la pagina Web Form che ospita il controllo utente (.aspx) si trovino nella stessa directory.

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

[PartialCaching(100)]
public partial class SimpleControl : System.Web.UI.UserControl
{    
    protected void Page_Load(object sender, EventArgs e)
    {
        ItemsRemaining.Text = GetAvailableItems().ToString();
        CacheTime.Text = DateTime.Now.ToLongTimeString();
    }

    private int GetAvailableItems()
    {
        SqlConnection sqlConnection = new SqlConnection
            ("Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;");
        SqlCommand sqlCommand = sqlConnection.CreateCommand();
        sqlCommand.CommandType = CommandType.StoredProcedure;
        sqlCommand.CommandText = "GetRemainingItems";
        sqlConnection.Open();
        int items = (int)sqlCommand.ExecuteScalar();
        sqlConnection.Close();
        return items;
    }
}
Imports System.Data.SqlClient

Partial Class SimpleControl
    Inherits System.Web.UI.UserControl

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        ItemsRemaining.Text = GetAvailableItems().ToString()
        CacheTime.Text = DateTime.Now.ToLongTimeString()
    End Sub

    Private Function GetAvailableItems() As Integer
        Dim sqlConnection As SqlConnection
        Dim sqlCommand As SqlCommand
        Dim items As Integer

        sqlConnection = New SqlConnection("Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;")
        sqlCommand = sqlConnection.CreateCommand()
        sqlCommand.CommandType = Data.CommandType.StoredProcedure
        sqlCommand.CommandText = "GetRemainingItems"
        sqlConnection.Open()
        items = CInt(sqlCommand.ExecuteScalar())
        sqlConnection.Close()
        Return items
    End Function
End Class
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SimpleControl.ascx.cs" Inherits="SimpleControl" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
<form id="Form1" runat="server">
<table cellspacing="15">
<tr>
<td><b>Available items: </b></td>
<td>
    <asp:Label ID="ItemsRemaining" runat="server" Text="Label"></asp:Label>
</td>
</tr>
<tr>
<td><b>As of: </b></td>
<td>
    <asp:Label ID="CacheTime" runat="server" Text="Label"></asp:Label>
</td>
</tr>
</table>
</form>
</body>
</html>
<%@ Control Language="VB" AutoEventWireup="true" CodeFile="SimpleControl.ascx.vb" Inherits="SimpleControl" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
<form id="Form1" runat="server">
<table cellspacing="15">
<tr>
<td><b>Available items: </b></td>
<td>
    <asp:Label ID="ItemsRemaining" runat="server" Text="Label"></asp:Label>
</td>
</tr>
<tr>
<td><b>As of: </b></td>
<td>
    <asp:Label ID="CacheTime" runat="server" Text="Label"></asp:Label>
</td>
</tr>
</table>
</form>
</body>
</html>

Commenti

La ControlCachePolicy classe viene usata dagli sviluppatori in scenari di controllo utente programmatici per specificare le impostazioni di memorizzazione nella cache di output per i controlli utente (file con estensione ascx). ASP.NET incorpora i controlli utente all'interno di un'istanza BasePartialCachingControl di . La BasePartialCachingControl classe rappresenta un controllo utente con memorizzazione nella cache di output abilitata. Quando si accede alla BasePartialCachingControl.CachePolicy proprietà di un PartialCachingControl controllo, si riceverà sempre un oggetto valido ControlCachePolicy . Tuttavia, se si accede alla UserControl.CachePolicy proprietà di un UserControl controllo, si riceve un oggetto valido ControlCachePolicy solo se il controllo utente è già sottoposto a wrapping da un BasePartialCachingControl controllo . Se non è sottoposto a wrapping, l'oggetto ControlCachePolicy restituito dalla proprietà genererà eccezioni quando si tenta di modificarlo perché non dispone di un oggetto associato.BasePartialCachingControl Per determinare se un'istanza UserControl di supporta la memorizzazione nella cache senza generare eccezioni, esaminare la SupportsCaching proprietà .

L'uso della classe è uno dei diversi modi in cui è possibile abilitare la ControlCachePolicy memorizzazione nella cache dell'output. L'elenco seguente descrive i metodi che è possibile usare per abilitare la memorizzazione nella cache dell'output:

  • Usare la direttiva per abilitare la @ OutputCache memorizzazione nella cache di output in scenari dichiarativi.

  • Usare l'attributo per abilitare la PartialCachingAttribute memorizzazione nella cache per un controllo utente in un file code-behind.

  • Usare la ControlCachePolicy classe per specificare le impostazioni della cache in scenari programmatici in cui si usano BasePartialCachingControl istanze abilitate per la cache usando uno dei metodi precedenti e caricate dinamicamente usando il TemplateControl.LoadControl metodo . Un'istanza ControlCachePolicy può essere modificata correttamente solo tra le Init fasi e PreRender del ciclo di vita del controllo. Se si modifica un ControlCachePolicy oggetto dopo la PreRender fase, ASP.NET genera un'eccezione, perché tutte le modifiche apportate dopo il rendering del controllo non possono influire effettivamente sulle impostazioni della cache (un controllo viene memorizzato nella cache durante la Render fase). Infine, un'istanza del controllo utente (e quindi il relativo ControlCachePolicy oggetto) è disponibile solo per la manipolazione a livello di codice quando viene effettivamente eseguito il rendering.

Proprietà

Cached

Ottiene o imposta un valore che indica se la cache a livello di frammento è attivata per il controllo utente.

Dependency

Ottiene o imposta un'istanza della classe CacheDependency associata all'output del controllo utente memorizzato nella cache.

Duration

Ottiene o imposta il periodo di tempo per cui gli elementi devono rimanere nella cache di output.

ProviderName

Ottiene o imposta il nome del provider della cache di output associato a un'istanza del controllo.

SupportsCaching

Ottiene un valore che indica se il controllo supporta l'inserimento nella cache.

VaryByControl

Ottiene o imposta un elenco di identificatori di controllo in base ai quali variare l'output inserito nella cache.

VaryByParams

Ottiene o imposta un elenco di nomi di parametro GET o POST in base ai quali variare l'output inserito nella cache.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
SetExpires(DateTime)

Indica al controllo BasePartialCachingControl che esegue il wrapping del controllo utente di far scadere la voce della cache alla data e all'ora specificate.

SetSlidingExpiration(Boolean)

Indica al controllo BasePartialCachingControl che esegue il wrapping del controllo utente di impostare la voce della cache del controllo utente per l'utilizzo di una scadenza assoluta o variabile.

SetVaryByCustom(String)

Imposta un elenco di stringhe personalizzate che verrà utilizzato dalla cache di output per variare il controllo utente.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche