Este artigo demonstra como implementar o cache de fragmento no ASP.NET. Cache de fragmento não realmente cache fragmentos de código de um formulário Web diretamente; cache de fragmento se refere ao cache de controles de usuário (. ascx) dentro de um formulário da Web. Cada controle de usuário pode ter independentes durações de cache e implementações de como o comportamento de cache deve ser aplicada. O código de exemplo neste artigo ilustra como atingir essa funcionalidade.
Cache de fragmento é útil quando você precisa armazenar apenas um subconjunto de uma página. Barras de navegação, cabeçalho e rodapés são bons candidatos para o cache de fragmento.
Requisitos
- Microsoft Windows 2000
- Microsoft Internet Information Server (IIS)
- Microsoft.NET Framework
- ASP.NET
Crie um aplicativo ASP.NET usando C#.NET
As etapas a seguir demonstram como criar uma nova página ASP.NET chamado FragmentCache.
- Abra o Microsoft Visual Studio.NET
- No menu arquivo , aponte para novoe clique em projeto.
- Na caixa de diálogo New Project , clique em Projetos do Visual C# em Tipos de projetoe clique em ASP.NET Web Application em modelos.
- Na caixa nome , digite FragmentCache. Na caixa Location , selecione o servidor apropriado. Se você estiver usando o servidor local, você pode deixar o nome do servidor como http://localhost.
Criar controles de usuário
Esta seção fornece código de exemplo e explicações de cada controle de usuário que será usada neste artigo. Copie e cole o código de exemplo na página code-behind e de arquivo. ascx associado conforme descrito.
Controle de usuário 1 (FragmentCtrl1. ascx)
O seguinte controle de usuário, FragmentCtrl1. ascx, é muito simple. FragmentCtrl1. ascx grava o tempo que ocorre a entrada de cache para o item. Como com todos os controles são criados para este artigo, uma descrição básica é fornecida para o controle facilitar a distinção das configurações e comportamentos associados em tempo de execução nas seções posteriores.
- Em Visual Studio.NET, crie um novo controle de usuário da seguinte maneira:
- No Solution Explorer, clique com o botão direito no nó do projeto, aponte para Adde, em seguida, clique em Adicionar um controle de usuário da Web.
- Nome do controle de FragmentCtrl1. ascx e clique em Abrir.
- Certifique-se de que está selecionada na guia Design . Clique e arraste um controle de formulário da Web de rótulo da seção Web Forms da caixa de ferramentas e solte o controle Label para a página.
- Clique no controle Label . No painel Propriedades do Visual Studio.Ambiente NET desenvolvimento integrado (IDE), digite CacheEntryTime na propriedade ID e deixe a propriedade de texto em branco.
- Alternar para modo de exibição HTML e adicione a seguinte diretiva @ OutputCache na parte superior da página:
<%@ OutputCache Duration="40" VaryByParam="none"%>
- Clique com o botão direito no arquivo. ascx e clique em Exibir código para exibir a origem de página code-behind.
- Adicione o seguinte código ao evento Page_Load , que define a propriedade Text do rótulo CacheEntryTime :
private void Page_Load(object sender, System.EventArgs e)
{
CacheEntryTime.Text ="FragmentCtrl1: " + DateTime.Now.TimeOfDay.ToString();
}
Controle de usuário 2 (FragmentCtrl2. ascx)
Embora você possa simplesmente criar outra versão do primeiro controle com uma duração de cache diferentes para mostrar como vários controles de usuário podem ter comportamentos independentes na mesma página, esta seção torna o segundo controle de FragmentCtrl2. ascx, mais interessante. FragmentCtrl2. ascx é usado para apresentar o atributo
VaryByControl .
VaryByControl permite entradas de cache diferentes sejam feitas com base nos valores para um controle especificado. Essa funcionalidade é feita com mais clareza em tempo de execução na próxima seção.
- Em Visual Studio.NET, crie um novo controle de usuário da seguinte maneira:
- No Solution Explorer, clique com o botão direito no nó do projeto, aponte para Adde, em seguida, clique em Adicionar um controle de usuário da Web.
- Nomeie o controle de FragmentCtrl2. ascx e clique em Abrir.
- Certifique-se de que está selecionada na guia Design . Clique e arraste um controle de formulário da Web de rótulo da seção Web Forms da caixa de ferramentas e solte o controle Label para a página.
- Clique no controle Label . No painel Propriedades, digite CacheEntryTime na propriedade ID e deixe a propriedade de texto em branco.
- Posicione o cursor diretamente após o controle Label e pressione ENTER para mover para a próxima linha na página.
- Clique e arraste um controle de formulário da Web RadioButtonList da seção Web Forms da caixa de ferramentas e solte-na página. O controle RadioButtonList deve aparecer sozinho na linha após o controle Label .
- Clique no controle RadioButtonList . No painel Propriedades, digite MyRadioButtonList na propriedade ID .
- No painel Propriedades, localize a propriedade Items do controle MyRadioButtonList , clique em coleçãoe clique no botão de reticências (...) que aparece ao lado da coleção.
- Na janela ListItem Collection Editor , adicione membros ListItem da seguinte maneira:
- Em membros, clique em Adicionar.
- Na seção de propriedades ListItem , definir o texto e o valor para Sime defina Selected como True.
- Em membros, clique em Adicionar novamente.
- Na seção de propriedades ListItem , definir o texto e o valor como nãoe definir selecionado para False.
- Em membros, clique em Adicionar uma última vez.
- Na seção de propriedades ListItem , definir o texto e o valor para talveze definir selecionado para False.
- Clique em OK para retornar ao arquivo. ascx no modo Design. Observe que três botões de opção aparecem contidos dentro do controle RadioButtonList : Sim, nãoe talvez.
- Posicione o cursor diretamente após o controle RadioButtonList e pressione ENTER para mover para a próxima linha na página.
- Clique e arraste um controle de botão de formulário da Web da seção Web Forms da caixa de ferramentas e solte-na página. O controle de botão deve aparecer sozinho na linha após o controle RadioButtonList .
- Clique no controle Button . No painel Propriedades, digite Enviar na propriedade Text .
- Alternar para modo de exibição HTML e adicione a seguinte diretiva @ OutputCache na parte superior da página:
<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
- Clique com o botão direito no arquivo. ascx e clique em Exibir código para exibir a origem de página code-behind.
- Adicione o seguinte código ao evento Page_Load , que define a propriedade Text do rótulo CacheEntryTime :
private void Page_Load(object sender, System.EventArgs e)
{
CacheEntryTime.Text = "FragmentCtrl2: " + DateTime.Now.TimeOfDay.ToString();
}
Criar o formulário da Web para conter os controles de usuário
Agora você pode criar o formulário da Web (. aspx) para conter o controle de usuário recentemente desenvolvidos. Para criar o formulário da Web, siga estas etapas:
- Adicione um novo formulário da Web chamado FragmentCaching. aspx ao seu projeto no Visual Studio.NET da seguinte maneira:
- No Solution Explorer, clique com o botão direito no nó do projeto, aponte para Adde, em seguida, clique em Adicionar formulário da Web.
- Nome FragmentCaching de formulário da Web e clique em Abrir.
- Certifique-se de que está selecionada na guia Design . Clique e arraste um controle de formulário da Web de rótulo da seção Web Forms da caixa de ferramentas e solte-na página.
- Clique no controle Label . No painel Propriedades, digite Tempo na propriedade ID e deixe a propriedade de texto em branco.
- Posicione o cursor diretamente após o controle Label e pressione ENTER para mover para a próxima linha na página.
- Arraste FragmentCtrl1. ascx e solte-o no formulário da Web para que fique posicionado após o controle de rótulo em uma linha sozinha. Posicione o cursor diretamente após o controle e pressione ENTER para mover para a próxima linha na página.
- Arraste FragmentCtrl2. ascx e solte-o no formulário da Web para que fique posicionado após FragmentCtrl1. ascx em uma linha sozinha.
- No modo de exibição HTML, o formulário da Web deve aparecer semelhante ao seguinte código:
<%@ Page language ="c#" Codebehind="FragmentCaching.aspx.cs"
AutoEventWireup="false" Inherits="FragmentCache.FragmentCaching" %>
<%@ Register TagPrefix="uc1" TagName="FragmentCtrl1" Src="FragmentCtrl1.ascx" %>
<%@ Register TagPrefix="uc1" TagName="FragmentCtrl2" Src="FragmentCtrl2.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="FragmentCaching" method="post" runat="server">
<P>
WebForm Time:
<asp:Label id="Time" runat="server" ForeColor="Blue"></asp:Label>
</P>
<P>
<uc1:FragmentCtrl1 id="FragmentCtrl11" runat="server">
</uc1:FragmentCtrl1>
</P>
<P>
<uc1:FragmentCtrl2 id="FragmentCtrl21" runat="server">
</uc1:FragmentCtrl2>
</P>
</form>
</body>
</HTML>
Nota: Certifique-se de que os controles são colocados dentro de - Clique com o botão direito no arquivo. aspx e clique em Exibir código para exibir a origem de página code-behind.
- Adicione o seguinte código ao evento Page_Load , que define a propriedade Text do rótulo de tempo :
private void Page_Load(object sender, System.EventArgs e)
{
Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString();
}
- No menu arquivo , clique em Salvar tudo para salvar os controles de usuário, o formulário da Web e outros arquivos de projeto associado.
- No menu Build do Visual Studio.NET ambiente de desenvolvimento integrado (IDE), clique em criar para criar o projeto.
Executar o exemplo
Esta seção demonstra como exibir o código em tempo de execução para testemunhar o comportamento de cache e, em seguida, descreve resumidamente por que o código executa da maneira que ele faz.
- Em Visual Studio.NET IDE Solution Explorer, clique com o botão direito do formulário da Web FragmentCaching e clique em View in Browser para executar o código.
- Após a página aparecer no navegador, clique com o botão direito na página e clique em Atualizar para atualizar a página. Você também pode pressionar a tecla F5 para atualizar a página, se você estiver exibindo a página em um navegador externo Visual Studio.NET IDE.
Observe que o tempo no formulário da Web foi atualizado, mas os controles de usuário ainda exibem o horário quando suas entradas do cache associado foi feita. - No segundo controle, clique em Enviar. Observe que o controle exibe um horário atualizado. Essa é a resposta para a configuração do atributo VaryByControl para o controle de usuário que referencia o controle RadioButtonList .
- Clique em nãoe clique em Enviar novamente. Observe o horário é atualizado novamente na exibição do controle de usuário. Isso ocorre porque uma nova entrada de cache é feita para o controle com base nessa configuração de valor não .
Repita esta etapa, exceto com a opção talvez . Você verá o mesmo comportamento. - Clique em Sime clique em Enviar novamente. Repita esta operação com as opções não e talvez . Observe que essas seleções para o controle são armazenadas em cache e eles exibem o tempo de entrada de cache anterior. Se você continuar clique em Submit após configuração de duração da diretiva @ OutputCache , tempo do controle de usuário é atualizado para cada seleção de valor específico para o controle RadioButtonList .
Observação: não é o objetivo deste artigo cobrir todas as possíveis configurações e cenários de cache de fragmento. Para obter mais informações, consulte o
Referências seção no final deste artigo.
Solução de problemas
- Não tente manipular programaticamente um controle de usuário que é o cache de saída. Isso ocorre porque o controle só é criado dinamicamente quando é executado pela primeira vez antes de ocorre a entrada de cache. O cache de saída satisfaz todas as outras solicitações até o controle expira.
- Se o formulário da Web em que o usuário controles estão hospedados possuir uma duração de cache de saída é maior do que os tempos de duração dos controles de usuário, configuração do formulário da Web determina o comportamento de cache dos controles.
Para obter informações adicionais sobre ASP.NET, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
307225
(http://support.microsoft.com/kb/307225/EN-US/
)
INFO: ASP.NET Caching Overview