Quando colocamos uma determinada página em OutputCache nas versões 1.x do ASP.NET, tínhamos/temos problemas quando existem nesta página, regiões dinamicas que, devem ser sempre atualizadas quando um Refresh ou PostBack acontecer.
Com este cenário, ou teríamos que optar por não deixar a página em OutputCache, ou criar UserControls (arquivos ASCX) para habilitar o Fragment Caching e assim, atualizar essas informações dinamicas. No ASP.NET 2.0 foi introduzido um novo conceito chamado de Post Cache Substitution. Trata-se de um controle chamado Substitution, que temos à disposição na ToolBox do Visual Studio .NET 2005. Devemos arrastá-lo para o local da página onde o conteúdo será dinamico e, através da propriedade MethodName do mesmo, apontamos para um método estático que, obrigatoriamente deverá estar de acordo com o delegate HttpResponseSubstitutionCallback. Este será o método qual o ASP.NET executará sempre.
Abaixo é exibido um exemplo simples que ilustra o funcionamento desta nova feature:
<%@ OutputCache Duration=”60″ VaryByParam=”none” %>
….
<asp:Substitution
ID=”Substitution1″
runat=”server”
MethodName=”GetCurrentDateTime” />
<asp:Label
ID=”Label1″
runat=”server”
Text=”Label”>
</asp:Label>
E no CodeBehind:
protected void Page_Load(object sender, EventArgs e)
{
this.Label1.Text = DateTime.Now.ToString();
}
public static string GetCurrentDateTime(HttpContext ctx)
{
return DateTime.Now.ToString();
}
Esse código fará com que a página fique em OutputCache durante 60 segundos, porém a região da página que é determinada pelo controle Substitution, sempre será atualizada.