2009-07-21 9 views
5

Estoy tratando de entender el mecanismo ASP.NET OutputCache.
Creé una página de prueba con una Etiqueta y un Botón de enlace.
El texto de la etiqueta se inicializa en el servidor con la fecha actual del servidor en cada pageLoad:ASP.NET OutputCache y postbacks

protected void Page_Load(object sender, EventArgs e) 
{ 
    lblDate.Text = DateTime.Now.ToString(); 
} 

utilicé esta directiva: <%@ OutputCache Duration="600" VaryByParam="none"%>

Al pulsar el LinkButton la primera vez que tengo un nuevo texto en la etiqueta, pero si presiono el botón de enlace nuevamente, no obtengo un nuevo texto.

Supongo que esto se debe a los parámetros que se transfieren al servidor que son los mismos para cada devolución.

¿Hay alguna forma de trabajar con OutputCach y los controles de devolución de datos?

Respuesta

6

derecho, la cosa es que está variando por ningún parámetro de modo html respuesta de la primera petición se almacena en caché y sirvió durante los próximos 10 minutos (en teoría). Si desea almacenar GET en caché pero procesar diferentes POST, debe variar según sus parámetros de POST.

Déjeme darle un ejemplo. Tiene una entrada de texto utilizada para enviar un correo electrónico con su contenido en POST. Si varía según ese nombre de entrada, cada solicitud dentro del lapso de tiempo de almacenamiento en caché con diferentes valores para esa entrada de texto golpearía su controlador y procesaría el envío del correo electrónico.

En el otro lado, puede variar en * pero perdería el almacenamiento en caché en modo kernel.

+0

¿Puedes publicar un ejemplo caliente para usar mis parámetros de publicación como VaryByParam? – lnetanel

+0

seguro, <% @ OutputCache Duration = "600" VaryByParam = "YourPostParam1, YourPostParam2, (cualquier parámetro GET también), ..."%> – user134706

+0

Acabo de entender esto antes de encontrar esta publicación - en realidad hemos tenido un problema con ¡un lanzamiento en vivo porque teníamos VaryByParam configurado en "ninguno" donde las páginas se publicaban solo! –

2

Tiene usted razón en sus suposiciones.

Su directiva OutputCache está diciendo el mecanismo de almacenamiento en caché de salida para almacenar en caché la totalidad rendido página para una URL específica, durante 600 segundos.

En su ejemplo simple, probablemente no esté utilizando cadenas de consulta, sin embargo, la declaración VaryByParam dentro de la directiva le permite especificar un parámetro de cadena de consulta que garantiza que cada valor diferente de ese parámetro se almacena en caché por separado. Por ejemplo, si usted tenía:

<%@ OutputCache Duration="600" VaryByParam="ProductID"%> 

entonces estas tres URL diferente de cada uno serían en caché de forma individual, y cambiando el valor del parámetro "ProductID" a algo aún no caché sería asegurar que la página se procesa y se representa por el tiempo de ejecución de ASP.NET correctamente:

http://www.example.com/viewproduct.aspx?ProductID=123 
http://www.example.com/viewproduct.aspx?ProductID=3 
http://www.example.com/viewproduct.aspx?ProductID=67 

en su ejemplo, en su clic de botón, la página ya ha sido dictada con anterioridad (y en caché) y cuando publique de nuevo no hay diferencia en la URL que son publicar y volver a cargar de manera efectiva, por lo tanto, el tiempo de ejecución de ASP.NET le mostrará la página almacenada en caché sin pasar por e proceso de re-renderización.

Aparte de cambiar el valor de un parámetro "VaryByParam", la directiva OutputCache es bastante un enfoque de "todo o nada" para el almacenamiento en caché de páginas. Sin embargo, existe un atributo "VaryByContol" para la directiva, que solo se puede usar en los controles de usuario de ASP.NET, en lugar de una página web completa de ASP.NET.

De su pregunta, parece más que necesita investigar parcial caché de página. O eso o un mecanismo para invalidar la caché cuando ocurre algún evento. Esto generalmente se hace agregando una "dependencia de caché".

Por eso, los siguientes enlaces deben ayudar:

Caching Portions of an ASP.NET Page
Tip/Trick: Implement "Donut Caching" with the ASP.NET 2.0 Output Cache Substitution Feature
Programmatically Removing a Page from the OutputCache

Cuestiones relacionadas