-
Você pode usar o controle Substituição para criar áreas em uma página da Web que podem ser atualizadas dinamicamente e posteriormente integradas às páginas armazenadas em cache.
1. Planeje
Use o controle Substituição para especificar as partes da página da Web onde você deseja armazenar em cache a saída do conteúdo dinâmico. Para páginas onde a maior parte do conteúdo está armazenada em cache, o controle Substituição fornece uma solução simplificada para cache parcial de páginas. Você pode armazenar em cache a saída de uma página inteira e usar o controle Substituição para especificar as partes da página que não estão armazenadas em cache. A área de cache é executada apenas uma vez e será lida no cache até que a entrada do cache expire ou seja limpa. As regiões dinâmicas são executadas sempre que a página é solicitada. Esse modelo de cache simplifica a codificação de páginas da Web cujo conteúdo é principalmente estático porque você não precisa encapsular esse conteúdo estático em um controle de usuário da Web para colocá-lo no cache. Por exemplo, esse modelo de cache é útil para páginas da Web que contêm conteúdo estático (como notícias) e um controle AdRotator que exibe anúncios. As notícias não mudam com frequência, o que significa que podem ser armazenadas em cache. Você pode exibir um novo anúncio sempre que um usuário solicitar a página. O controle AdRotator oferece suporte direto à substituição pós-cache, que renderiza um novo anúncio em cada postback da página da Web, independentemente de a página da Web estar armazenada em cache.
2. Antecedentes
Quando você armazena em cache uma página da Web ASP.NET, por padrão, toda a saída da página é armazenada em cache. Na primeira solicitação, a página será executada e sua saída será armazenada em cache. Para solicitações subsequentes, isso será feito por meio do cache e o código dessa página não será executado.
Em alguns casos, você pode querer não apenas armazenar em cache uma página da Web ASP.NET, mas também atualizar partes selecionadas da página sempre que ela for solicitada. Por exemplo, você pode querer armazenar em cache uma grande parte de uma página, mas precisar atualizar dinamicamente informações altamente urgentes na página.
Você pode usar o controle Substituição para inserir conteúdo dinâmico em páginas em cache. O controle Substituição não renderiza nenhuma marcação. Portanto, você precisa vincular o controle a um método na página da Web ou no controle de usuário pai. Você precisa criar métodos estáticos que retornem informações a serem inseridas na página web. Os métodos chamados pelos controles de Substituição devem atender aos seguintes critérios:
·Deve ser um método estático (compartilhado em Visual Basic).
·Deve aceitar parâmetros do tipo HttpContext.
·Deve retornar um valor do tipo String.
O controle Substituição não tem acesso a outros controles na página web, o que significa que você não pode inspecionar ou alterar os valores de outros controles. Entretanto, o código pode acessar o contexto da página atual usando os parâmetros passados a ela.
Quando a página é executada, o controle Substitution chama esse método e, em seguida, substitui os controles Substitution na página pelo valor de retorno do método.
exemplo de código
O exemplo a seguir demonstra como usar o controle Substituição para criar conteúdo atualizável dinamicamente em uma página em cache. O código no evento Load da página atualiza o controle Label com a hora atual. Como a duração do cache da página foi definida como 60 segundos, o texto do controle Label não muda, mesmo que a página seja solicitada diversas vezes em um período de 60 segundos. O controle Substitution na página chama o método estático GetTime, que retorna a hora atual como uma string. Cada vez que a página da web é atualizada, o valor representado pelo controle Substituição é atualizado.
<%@ Idioma da página="C#" %>
<%@ Duração do OutputCache=60 VaryByParam="None" %>
<script runat="servidor">
vazio Page_Load()
{
Label1.Text = DateTime.Now.ToString();
}
String estática pública GetTime (contexto HttpContext)
{
retornar DateTime.Now.ToString();
}
</script>
<html>
<head runat="servidor"></head>
<corpo>
<form id="form1" runat="servidor">
<div>
<p>
<asp:Label runat="servidor" ID="Label1" />
</p>
<p>
<asp:Substituição runat="servidor"
ID="Substituição1"
MethodName="GetTime" />
</p>
<p>
<asp:Button runat="servidor" ID="Button1" Text="Enviar"/>
</p>
</div>
</form>
</body>
</html>
3. Classe de substituição
Use o controle Substituição para especificar a parte da página da Web armazenada em cache de saída que você deseja substituir no controle por conteúdo dinâmico. O controle Substituição fornece uma solução simplificada para armazenar em cache páginas parciais para páginas onde a maior parte do conteúdo deve ser armazenada em cache. Você pode armazenar em cache a página inteira e usar o controle Substituição para especificar as partes da página que estão isentas de armazenamento em cache. As áreas que precisam ser armazenadas em cache são executadas apenas uma vez e depois lidas no cache até que o item do cache expire ou seja limpo. As regiões dinâmicas são executadas sempre que a página é solicitada. Esse modelo de cache simplifica o código para páginas com conteúdo principalmente estático porque essas partes não precisam ser encapsuladas para armazenamento em cache em controles de usuário da Web. Por exemplo, esse modelo de cache será útil se a página contiver conteúdo estático (como um artigo de notícias) e um controle AdRotator que exiba anúncios. Os artigos de notícias não mudam, o que significa que podem ser armazenados em cache. No entanto, você deseja exibir um novo anúncio sempre que um usuário solicitar a página. O controle AdRotator oferece suporte direto à substituição pós-cache, que renderiza um novo anúncio quando a página é postada novamente, independentemente de a página estar armazenada em cache.
Nota: O controle Substituição pode ser colocado no controle de usuário contido na página de cache. Entretanto, você não pode colocar um controle de Substituição em um controle de usuário de cache de saída.
Quando o controle Substituição é executado, um método que retorna uma string é chamado. A string retornada por esse método é o conteúdo a ser exibido no local do controle Substituição na página. Use a propriedade MethodName para especificar o nome do método de retorno de chamada a ser chamado quando o controle Substitution for executado. O método de retorno de chamada especificado deve ser um método estático da página ou do controle de usuário que contém o controle Substitution. A assinatura do método de retorno de chamada deve corresponder à assinatura do delegado HttpResponseSubstitutionCallback que aceita um parâmetro HttpContext e retorna uma string.
Para operar o cache de saída da página, você pode usar a diretiva @OutputCache, a classe HttpCachePolicy ou a propriedade Cache.
Outra maneira de usar o controle Substitution é usar o delegado HttpResponseSubstitutionCallback para implementar o comportamento de substituição de cache. Além disso, o comportamento de substituição de cache pode ser implementado em controles que oferecem suporte direto à funcionalidade de substituição de cache, como o controle AdRotator.
Exemplo
O exemplo de código a seguir demonstra como adicionar declarativamente um controle Substitution a uma página da Web de cache de saída. Quando a página é carregada, o usuário vê a data e a hora atuais em uma guia. Esta área da página é armazenada em cache e atualizada a cada 60 segundos. Quando o controle Substitution é executado, o método GetCurrentDateTime é chamado. A string retornada por GetCurrentDateTime será exibida ao usuário. Esta parte da página não é armazenada em cache e atualizada sempre que a página é atualizada.
<%@ duração do cache de saída = "60" variebyparam = "nenhum" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="servidor" idioma="C#">
void Page_Load (remetente do objeto, System.EventArgs e)
{
// Exibe a data e hora atuais no rótulo.
// O cache de saída se aplica a esta seção da página.
CachedDateLabel.Text = DateTime.Now.ToString();
}
// O controle Substitution chama esse método para recuperar
// a data e hora atuais Esta seção da página.
// está isento de cache de saída.
string estática pública GetCurrentDateTime (contexto HttpContext)
{
retornar DateTime.Now.ToString();
}
</script>
<html>
<head runat="servidor">
<title>Exemplo de classe de substituição</title>
</head>
<corpo>
<form id="form1" runat="servidor">
<h3>Exemplo de classe de substituição</h3>
<p>Esta seção da página não está armazenada em cache:</p>
<asp:substituição id="Substituição1"
nome do método = "GetCurrentDateTime"
runat="Servidor">
</asp:substituição>
<br />
<p>Esta seção da página é armazenada em cache:</p>
<asp:label id="CachedDateLabel"
runat="Servidor">
</asp:label>
<br /><br />
<asp:button id="RefreshButton"
text="Atualizar página"
runat="Servidor">
</asp:botão>
</form>
</body>