-
Puede utilizar el control Sustitución para crear áreas en una página web que puedan actualizarse dinámicamente y posteriormente integrarse en páginas almacenadas en caché.
1. Planificar
Utilice el control Sustitución para especificar las partes de la página web donde desea almacenar en caché la salida del contenido dinámico. Para las páginas donde la mayor parte del contenido se almacena en caché, el control de sustitución proporciona una solución simplificada para el almacenamiento en caché parcial de la página. Puede almacenar en caché la salida de una página completa y luego usar el control de sustitución para especificar las partes de la página que no se almacenan en caché. El área de caché se ejecuta solo una vez y se leerá desde el caché hasta que la entrada del caché caduque o se borre. Las regiones dinámicas se ejecutan cada vez que se solicita la página. Este modelo de almacenamiento en caché simplifica la codificación de páginas web cuyo contenido es mayormente estático porque no es necesario encapsular este contenido estático en un control de usuario web para colocarlo en el caché. Por ejemplo, este modelo de almacenamiento en caché es útil para páginas web que contienen contenido estático (como noticias) y un control AdRotator que muestra anuncios. Las noticias no cambian con frecuencia, lo que significa que se pueden almacenar en caché. Es posible que desee mostrar un anuncio nuevo cada vez que un usuario solicite la página. El control AdRotator admite directamente el reemplazo posterior al caché, que muestra un nuevo anuncio en cada devolución de datos de la página web, independientemente de si la página web está almacenada en caché.
2. Antecedentes
Cuando almacena en caché una página web ASP.NET, de forma predeterminada, todos los resultados de la página se almacenan en caché. En la primera solicitud, la página se ejecutará y su resultado se almacenará en caché. Para solicitudes posteriores, esto se realizará mediante almacenamiento en caché y el código de esa página no se ejecutará.
En algunos casos, es posible que desee no sólo almacenar en caché una página web ASP.NET, sino también actualizar partes seleccionadas de la página cada vez que se solicita la página. Por ejemplo, es posible que desee almacenar en caché una gran parte de una página, pero necesite actualizar dinámicamente información muy urgente en la página.
Puede utilizar el control Sustitución para insertar contenido dinámico en páginas almacenadas en caché. El control de sustitución no genera ningún margen. Por lo tanto, debe vincular el control a un método en la página web o al control de usuario principal. Debe crear métodos estáticos que devuelvan información para insertarla en la página web. Los métodos convocados por controles de sustitución deben cumplir los siguientes criterios:
·Debe ser un método estático (compartido en Visual Basic).
·Debe aceptar parámetros de tipo HttpContext.
·Debe devolver un valor de tipo String.
El control Sustitución no tiene acceso a otros controles en la página web, lo que significa que no puede inspeccionar ni cambiar los valores de otros controles. Sin embargo, el código puede acceder al contexto de la página actual utilizando los parámetros que se le pasan.
Cuando se ejecuta la página, el control de Sustitución llama a este método y luego reemplaza los controles de Sustitución en la página con el valor de retorno del método.
ejemplo de código
El siguiente ejemplo demuestra cómo utilizar el control Sustitución para crear contenido actualizable dinámicamente en una página almacenada en caché. El código en el evento Load de la página actualiza el control Label con la hora actual. Debido a que la duración de la caché de la página se ha establecido en 60 segundos, el texto del control Etiqueta no cambia, incluso si la página se solicita varias veces dentro de un período de 60 segundos. El control de sustitución de la página llama al método estático GetTime, que devuelve la hora actual como una cadena. Cada vez que se actualiza la página web, se actualiza el valor representado por el control Sustitución.
<%@ Idioma de página="C#" %>
<%@ Duración de OutputCache=60 VaryByParam="Ninguno" %>
<script runat="servidor">
vacío Page_Load()
{
Etiqueta1.Texto = FechaHora.Ahora.ToString();
}
Cadena estática pública GetTime (contexto HttpContext)
{
devolver DateTime.Now.ToString();
}
</script>
<html>
<head runat="servidor"></head>
<cuerpo>
<formulario id="form1" runat="servidor">
<div>
<p>
<asp:Etiqueta runat="servidor" ID="Etiqueta1" />
</p>
<p>
<asp:Sustitución runat="servidor"
ID="Sustitución1"
NombreMétodo="GetTime" />
</p>
<p>
<asp:Botón runat="servidor" ID="Botón1" Texto="Enviar"/>
</p>
</div>
</formulario>
</cuerpo>
</html>
3. Clase de sustitución
Utilice el control Sustitución para especificar la parte de la página web almacenada en caché de salida que desea reemplazar con contenido dinámico. El control de sustitución proporciona una solución simplificada para almacenar en caché páginas parciales para páginas donde se debe almacenar en caché la mayor parte del contenido. Puede generar en caché toda la página y luego usar el control de sustitución para especificar las partes de la página que están exentas del almacenamiento en caché. Las áreas que deben almacenarse en caché se ejecutan solo una vez y luego se leen desde la caché hasta que el elemento de la caché caduque o se borre. Las regiones dinámicas se ejecutan cada vez que se solicita la página. Este modelo de almacenamiento en caché simplifica el código de páginas con contenido principalmente estático porque estas partes no tienen que encapsularse para el almacenamiento en caché en controles de usuario web. Por ejemplo, este modelo de almacenamiento en caché es útil si la página contiene contenido estático (como un artículo de noticias) y un control AdRotator que muestra anuncios. Los artículos de noticias no cambian, lo que significa que se pueden almacenar en caché. Sin embargo, desea mostrar un anuncio nuevo cada vez que un usuario solicita la página. El control AdRotator admite directamente el reemplazo posterior al caché, que genera un nuevo anuncio cuando la página se vuelve a publicar, independientemente de si la página está almacenada en caché.
Nota: El control de sustitución se puede colocar en el control de usuario contenido en la página de caché. Sin embargo, no puede colocar un control de sustitución dentro de un control de usuario de caché de resultados.
Cuando se ejecuta el control Sustitución, se llama a un método que devuelve una cadena. La cadena devuelta por este método es el contenido que se mostrará en la ubicación del control de sustitución en la página. Utilice la propiedad MethodName para especificar el nombre del método de devolución de llamada que se llamará cuando se ejecute el control de sustitución. El método de devolución de llamada especificado debe ser un método estático de la página o control de usuario que contiene el control de sustitución. La firma del método de devolución de llamada debe coincidir con la firma del delegado HttpResponseSubstitutionCallback que acepta un parámetro HttpContext y devuelve una cadena.
Para operar el caché de salida de la página, puede usar la directiva @OutputCache, la clase HttpCachePolicy o la propiedad Cache.
Otra forma de utilizar el control de sustitución es utilizar el delegado HttpResponseSubstitutionCallback para implementar el comportamiento de reemplazo de caché. Además, el comportamiento de reemplazo de caché se puede implementar en controles que admiten directamente la funcionalidad de reemplazo de caché, como el control AdRotator.
Ejemplo
El siguiente ejemplo de código demuestra cómo agregar mediante declaración un control de sustitución a una página web de caché de resultados. Cuando se carga la página, se muestra al usuario la fecha y hora actuales en una pestaña. Esta área de la página se almacena en caché y se actualiza cada 60 segundos. Cuando se ejecuta el control de sustitución, se llama al método GetCurrentDateTime. La cadena devuelta por GetCurrentDateTime se mostrará al usuario. Esta parte de la página no se almacena en caché ni se actualiza cada vez que se actualiza la página.
<%@ duración del caché de salida="60" variabyparam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional//ES"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="servidor" idioma="C#">
void Page_Load (remitente del objeto, System.EventArgs e)
{
// Muestra la fecha y hora actuales en la etiqueta.
// El almacenamiento en caché de resultados se aplica a esta sección de la página.
CachedDateLabel.Text = DateTime.Now.ToString();
}
// El control de sustitución llama a este método para recuperar
// la fecha y hora actuales. Esta sección de la página.
// está exento del almacenamiento en caché de resultados.
cadena estática pública GetCurrentDateTime (contexto HttpContext)
{
devolver DateTime.Now.ToString ();
}
</script>
<html>
<head runat="servidor">
<title>Ejemplo de clase de sustitución</title>
</cabeza>
<cuerpo>
<formulario id="form1" runat="servidor">
<h3>Ejemplo de clase de sustitución</h3>
<p>Esta sección de la página no está almacenada en caché:</p>
<asp:sustitución id="Sustitución1"
nombre del método="GetCurrentDateTime"
runat="Servidor">
</asp:sustitución>
<br />
<p>Esta sección de la página está almacenada en caché:</p>
<asp:label id="CachedDateLabel"
runat="Servidor">
</asp:etiqueta>
<br /><br />
<asp:button id="BotónActualizar"
texto="Actualizar página"
runat="Servidor">
</asp:botón>
</formulario>
</cuerpo>