Поделиться через


ControlCachePolicy Класс

Определение

Обеспечивает программный доступ к параметрам кэша выходного потока пользовательского элемента управления ASP.NET.

public ref class ControlCachePolicy sealed
public sealed class ControlCachePolicy
type ControlCachePolicy = class
Public NotInheritable Class ControlCachePolicy
Наследование
ControlCachePolicy

Примеры

В следующем примере кода показано, как пользовательский элемент управления может загружаться динамически и управляться программными средствами во время выполнения. Атрибут PartialCachingAttribute применяется к пользовательскому элементу управления с именем SimpleControl, что означает, что пользовательский элемент управления упаковывается PartialCachingControl в элемент управления во время выполнения. Параметрами SimpleControl кэширования объекта можно управлять программными средствами с помощью связанного ControlCachePolicy с ним объекта, который доступен через ссылку PartialCachingControl на элемент управления, который его заключает в оболочку. В этом примере Duration свойство проверяется во время инициализации страницы и изменяется с помощью SetSlidingExpiration методов и SetExpires , если выполняются некоторые условия.

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

В следующем примере кода показано использование пользовательского SimpleControl элемента управления со страницы веб-форм. Для успешного выполнения этого примера убедитесь, что файл пользовательского элемента управления (ASCX), файл кода программной части (.cs или .vb) и страница Веб-форм, на которых размещается пользовательский элемент управления (.aspx), находятся в одном каталоге.

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>

Комментарии

Класс ControlCachePolicy используется разработчиками в сценариях программного пользовательского управления для указания параметров кэширования выходных данных для пользовательских элементов управления (ASCX-файлов). ASP.NET внедряет пользовательские элементы управления в BasePartialCachingControl экземпляр. Класс BasePartialCachingControl представляет пользовательский элемент управления, для которого включено кэширование выходных данных. При доступе к свойству BasePartialCachingControl.CachePolicyPartialCachingControl элемента управления вы всегда будете получать допустимый ControlCachePolicy объект. Однако при доступе к свойству UserControl.CachePolicyUserControl элемента управления вы получите допустимый ControlCachePolicy объект, только если пользовательский элемент управления уже заключен в BasePartialCachingControl элемент управления . Если он не упакован, объект, ControlCachePolicy возвращаемый свойством , будет вызывать исключения при попытке управлять им, так как у него нет связанного BasePartialCachingControlобъекта . Чтобы определить, поддерживает ли UserControl экземпляр кэширование без создания исключений SupportsCaching , проверьте свойство .

ControlCachePolicy Использование класса является одним из нескольких способов включения кэширования выходных данных. В следующем списке описаны методы, которые можно использовать для включения кэширования выходных данных.

  • Используйте директиву , @ OutputCache чтобы включить кэширование выходных данных в декларативных сценариях.

  • Используйте атрибут , PartialCachingAttribute чтобы включить кэширование для пользовательского элемента управления в файле кода программной части.

  • Используйте класс , ControlCachePolicy чтобы указать параметры кэша в программных сценариях, в которых выполняется работа с BasePartialCachingControl экземплярами, которые были включены в кэш с помощью одного из предыдущих методов и динамически загружаются с помощью TemplateControl.LoadControl метода . Экземпляром ControlCachePolicy можно успешно управлять только между Init этапами и PreRender жизненного цикла элемента управления. При изменении ControlCachePolicy объекта после PreRender этапа ASP.NET вызывает исключение, так как любые изменения, внесенные после отрисовки элемента управления, не могут повлиять на параметры кэша (элемент управления кэшируется на Render этапе). Наконец, экземпляр пользовательского элемента управления (и, следовательно, его ControlCachePolicy объект) доступен только для программной обработки, когда он фактически отрисовывается.

Свойства

Cached

Возвращает и задает значение, показывающее, разрешено ли фрагментарное кэширование для пользовательского элемента управления.

Dependency

Получает или задает экземпляр класса CacheDependency, связанный с кэшированным выводом пользовательского элемента управления.

Duration

Возвращает или устанавливает время, в течение которого кэшируемые элементы должны оставаться в кэше выходного потока.

ProviderName

Получает или задает имя поставщика кэша вывода, связанного с экземпляром элемента управления.

SupportsCaching

Возвращает значение, указывающее, поддерживает ли пользовательский элемент управления кэширование.

VaryByControl

Возвращает или задает список идентификаторов элемента управления, с помощью которых выполняется сортировка выходных данных кэша.

VaryByParams

Возвращает или задает список имен параметров GET или POST, с помощью которых выполняется сортировка выходных данных кэша.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
SetExpires(DateTime)

Указывает элементу управления BasePartialCachingControl, который создает оболочку для пользовательского элемента управления, дату и время завершения кэширования.

SetSlidingExpiration(Boolean)

Указывает элементу управления BasePartialCachingControl, который создает оболочку для пользовательского элемента управления, задать для последнего скользящее или абсолютное завершение времени кэширования.

SetVaryByCustom(String)

Задает список пользовательских строк, используемых кэшем выходного потока для изменения пользовательского элемента управления.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел