ControlCachePolicy Classe

Definição

Fornece acesso programático às definições de cache de saída de um controlo de utilizador ASP.NET.

public ref class ControlCachePolicy sealed
public sealed class ControlCachePolicy
type ControlCachePolicy = class
Public NotInheritable Class ControlCachePolicy
Herança
ControlCachePolicy

Exemplos

O exemplo de código seguinte demonstra como um controlo do utilizador pode ser carregado dinamicamente e manipulado programaticamente em tempo de execução. O PartialCachingAttribute atributo é aplicado a um controlo de utilizador chamado SimpleControl, o que significa que o controlo de utilizador é envolto por um PartialCachingControl controlo em tempo de execução. As SimpleControl definições de cache do objeto podem ser manipuladas programaticamente através do objeto associado ControlCachePolicy , que está disponível através de uma referência ao PartialCachingControl controlo que o envolve. Neste exemplo, a Duration propriedade é examinada durante a inicialização da página e alterada usando os SetSlidingExpiration métodos e SetExpires se algumas condições forem cumpridas.

<%@ 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>

O exemplo de código seguinte demonstra o uso do controlo SimpleControl do utilizador a partir de uma página Web Forms. Para executar este exemplo com sucesso, certifique-se de que o ficheiro de controlo do utilizador (.ascx), o seu ficheiro de código por trás (.cs ou .vb) e a página Web Forms que aloja o controlo do utilizador (.aspx) estão no mesmo diretório.

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>

Observações

A ControlCachePolicy classe é usada por programadores em cenários programáticos de controlo de utilizador para especificar definições de cache de saída para controlos de utilizador (ficheiros .ascx). ASP.NET incorpora os controlos do utilizador numa instância BasePartialCachingControl. A BasePartialCachingControl classe representa um controlo de utilizador que tem a cache de saída ativada. Quando acede à BasePartialCachingControl.CachePolicy propriedade de um PartialCachingControl controlo, receberá sempre um objeto válido ControlCachePolicy . No entanto, se aceder à UserControl.CachePolicy propriedade de um UserControl controlo, só recebe um objeto válido ControlCachePolicy se o controlo do utilizador já estiver envolto por um BasePartialCachingControl controlo. Se não estiver encapsulado, o ControlCachePolicy objeto devolvido pela propriedade lançará exceções quando tentar manipulá-lo porque não tem um elemento associado BasePartialCachingControl. Para determinar se uma UserControl instância suporta cache sem gerar exceções, inspecione a SupportsCaching propriedade.

Usar a ControlCachePolicy classe é uma das várias formas de ativar o cache de saída. A lista seguinte descreve métodos que pode usar para permitir a cache de saída:

  • Use a @ OutputCache diretiva para permitir a cache de saída em cenários declarativos.

  • Use o PartialCachingAttribute atributo para ativar a cache de um controlo de utilizador num ficheiro code-behind.

  • Use a ControlCachePolicy classe para especificar definições de cache em cenários programáticos em que esteja a trabalhar com BasePartialCachingControl instâncias que tenham sido ativadas em cache usando um dos métodos anteriores e carregadas dinamicamente com esse TemplateControl.LoadControl método. Uma ControlCachePolicy instância só pode ser manipulada com sucesso entre as Init fases e PreRender do ciclo de vida do controlo. Se modificar um objeto ControlCachePolicy após a fase PreRender, ASP.NET lança uma exceção, porque quaisquer alterações feitas após o renderizado do controlo não podem realmente afetar as definições de cache (um controlo é armazenado em cache durante a fase Render). Finalmente, uma instância de controlo do utilizador (e, portanto, o seu ControlCachePolicy objeto) só está disponível para manipulação programática quando é realmente renderizada.

Propriedades

Name Description
Cached

Obtém ou define um valor que indica se a cache de fragmentos está ativada para o controlo do utilizador.

Dependency

Obtém ou define uma instância da CacheDependency classe associada à saída de controlo do utilizador em cache.

Duration

Obtém ou define o tempo que os itens em cache devem permanecer na cache de saída.

ProviderName

Obtém ou define o nome do fornecedor de cache de saída associado a uma instância de controlo.

SupportsCaching

Recebe um valor que indica se o controlo do utilizador suporta cache.

VaryByControl

Obtém ou define uma lista de identificadores de controlo para variar a saída em cache.

VaryByParams

Obtém ou define uma lista de GET nomes de POST parâmetros para variar a saída em cache.

Métodos

Name Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
SetExpires(DateTime)

Instrui o BasePartialCachingControl controlo que envolve o controlo do utilizador a expirar a entrada da cache na data e hora especificadas.

SetSlidingExpiration(Boolean)

Instrui o BasePartialCachingControl controlo que envolve o controlo de utilizador a definir a entrada de cache do controlo de utilizador para usar expiração deslizante ou absoluta.

SetVaryByCustom(String)

Define uma lista de strings personalizadas que a cache de saída usará para variar o controlo do utilizador.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também