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.CachePolicy свойству UserControl элемента управления получается допустимый ControlCachePolicy объект, только если элемент управления пользователя уже упакован элементом BasePartialCachingControl управления. Если он не упакован, объект, возвращаемый свойством, ControlCachePolicy вызовет исключения при попытке управления им, так как он не связан BasePartialCachingControl. Чтобы определить, поддерживает ли UserControl экземпляр кэширование без создания исключений, проверьте SupportsCaching свойство.
ControlCachePolicy Использование класса является одним из нескольких способов включения кэширования выходных данных. В следующем списке описаны методы, которые можно использовать для включения кэширования выходных данных:
Используйте директиву
@ OutputCache, чтобы включить кэширование выходных данных в декларативных сценариях.PartialCachingAttribute Используйте атрибут, чтобы включить кэширование для пользовательского элемента управления в файле программной части.
ControlCachePolicy Используйте класс, чтобы указать параметры кэша в программных сценариях, в которых вы работаете с BasePartialCachingControl экземплярами, которые были включены в кэш с помощью одного из предыдущих методов и динамически загружаются с помощью TemplateControl.LoadControl метода. Экземпляр ControlCachePolicy можно успешно управлять только между
InitэтапамиPreRenderжизненного цикла управления. При изменении ControlCachePolicy объекта после этапа ASP.NET вызывает исключение, так как любые изменения, внесенные послеPreRenderотрисовки элемента управления, не могут повлиять на параметры кэша (элемент управления кэшируется во времяRenderэтапа). Наконец, экземпляр пользовательского элемента управления (и, следовательно, его ControlCachePolicy объект) доступен только для программной манипуляции, когда он фактически отрисовывается.
Свойства
| Имя | Описание |
|---|---|
| Cached |
Возвращает или задает значение, указывающее, включена ли кэширование фрагментов для пользовательского элемента управления. |
| Dependency |
Возвращает или задает экземпляр класса, связанного с выходными данными кэшированного пользовательского CacheDependency элемента управления. |
| Duration |
Возвращает или задает время, которое кэшированные элементы останутся в выходном кэше. |
| ProviderName |
Возвращает или задает имя поставщика выходного кэша, связанного с экземпляром элемента управления. |
| SupportsCaching |
Возвращает значение, указывающее, поддерживается ли элемент управления пользователем кэширование. |
| VaryByControl |
Возвращает или задает список идентификаторов элементов управления, которые зависят от кэшированных выходных данных. |
| VaryByParams |
Возвращает или задает список имен |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| SetExpires(DateTime) |
Указывает BasePartialCachingControl элементу управления, который упаковывает пользовательский элемент управления, чтобы срок действия записи кэша истекал по заданной дате и времени. |
| SetSlidingExpiration(Boolean) |
Указывает BasePartialCachingControl элементу управления, который упаковывает элемент управления пользователем, чтобы задать запись кэша пользовательского элемента управления для использования скользящего или абсолютного истечения срока действия. |
| SetVaryByCustom(String) |
Задает список пользовательских строк, которые кэш выходных данных будет использовать для изменения пользовательского элемента управления. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |