Executar o cache de fragmento em ASP.NET usando o Visual C# .NET

Este artigo descreve como executar o Cache de Fragmento em ASP.NET usando o Visual C# .NET.

Versão original do produto: Microsoft ASP.NET
Número de KB original: 308378

Resumo

Este artigo demonstra como implementar o cache de fragmentos no ASP.NET. O cache de fragmento não armazena em cache diretamente os fragmentos de código de um Formulário Web; O cache de fragmentos refere-se ao cache de controles de usuário individuais (.ascx) em um Formulário Web. Cada controle de usuário pode ter durações de cache independentes e implementações de como o comportamento de cache deve ser aplicado. O código de exemplo neste artigo ilustra como obter essa funcionalidade.

O cache de fragmento é útil quando você precisa armazenar em cache apenas um subconjunto de uma página. Barras de navegação, cabeçalho e rodapés são bons candidatos para cache de fragmentos.

Requisitos

  • Windows 2000
  • Servidor de Informações da Internet (IIS)
  • .NET Framework
  • ASP.NET

Criar um aplicativo Web ASP.NET usando o .NET do C#

As etapas a seguir demonstram como criar um novo aplicativo Web ASP.NET chamado FragmentCache.

  1. Abrir o Visual Studio .NET

  2. No menu arquivo, aponte para novo e, em seguida, clique em Project.

  3. Na caixa de diálogo Novo Projeto , clique em Projetos do Visual C# em Tipos de Projeto e clique em ASP.NET Aplicativo Web em Modelos.

  4. Na caixa Nome , digite FragmentCache. Na caixa Localização , selecione o servidor apropriado. Se você estiver usando o servidor local, poderá deixar o nome do servidor como http://localhost.

Criar os controles de usuário

Esta seção fornece o código de exemplo e as explicações de cada controle de usuário que você usará neste artigo. Você pode copiar e colar o código de exemplo na página associated.ascx file e code-behind, conforme descrito.

Controle de usuário 1 (FragmentCtrl1.ascx)

O controle de usuário a seguir, FragmentCtrl1.ascx, é simples. FragmentCtrl1.ascx grava a hora em que a entrada de cache para o item ocorre. Assim como acontece com todos os controles criados para este artigo, uma descrição básica é fornecida para que o controle facilite a distinção das configurações e dos comportamentos associados em tempo de execução nas seções posteriores.

  1. No Visual Studio .NET, crie um novo controle de usuário da seguinte maneira:

    1. Em Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto, aponte para Adicionar e clique em Adicionar Controle de Usuário da Web.
    2. Nomeie o controle FragmentCtrl1.ascx e clique em Abrir.
  2. Verifique se a guia Design está selecionada. Clique e arraste um controle Rótulo de Formulário Web da seção Web Forms da caixa de ferramentas e solte o controle Rótulo na página.

  3. Clique no controle Rótulo. No painel Propriedades do ambiente de desenvolvimento integrado do Visual Studio .NET (IDE), digite CacheEntryTime na propriedade ID e deixe a propriedade Text em branco.

  4. Alterne para a exibição HTML e adicione a seguinte @ OutputCache diretiva à parte superior da página:

    <%@ OutputCache Duration="40" VaryByParam="none"%>
    
  5. Clique com o botão direito do mouse no arquivo .ascx e clique em Exibir Código para exibir a fonte de página de código atrás.

  6. Adicione o seguinte código ao Page_Load evento, que define a CacheEntryTime propriedade do Text rótulo:

    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 diferente para mostrar como vários controles de usuário podem ter comportamentos independentes na mesma página, esta seção torna o segundo controle, FragmentCtrl2.ascx, mais interessante. FragmentCtrl2.ascx é usado para introduzir o atributo VaryByControl . VaryByControl permite que diferentes entradas de cache sejam feitas com base nos valores de um controle especificado. Essa funcionalidade fica muito mais clara no tempo de execução na próxima seção.

  1. No Visual Studio .NET, crie um novo controle de usuário da seguinte maneira:

    1. Em Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto, aponte para Adicionar e clique em Adicionar Controle de Usuário da Web.
    2. Nomeie o controle FragmentCtrl2.ascx e clique em Abrir.
  2. Verifique se a guia Design está selecionada. Clique e arraste um controle Rótulo de Formulário Web da seção Web Forms da caixa de ferramentas e, em seguida, solte o controle Rótulo na página.

  3. Clique no controle Rótulo. No painel Propriedades , digite CacheEntryTime na propriedade ID e deixe a propriedade Text em branco.

  4. Posicione o cursor diretamente após o controle Rótulo e pressione ENTER para mover para a próxima linha na página.

  5. Clique e arraste um controle Web Form RadioButtonList da seção Web Forms da caixa de ferramentas e solte-o na página. O controle RadioButtonList deve aparecer sozinho na linha após o controle Label.

  6. Clique no controle RadioButtonList. No painel Propriedades , digite MyRadioButtonList na propriedade ID .

  7. No painel Propriedades , localize a propriedade Itens para o controle MyRadioButtonList , clique em Coleção e clique no botão reticências (...) que aparece ao lado de Collection.

  8. Na janela ListItem Collection Editor, adicione membros ListItem da seguinte maneira:

    1. Em Membros, clique em Adicionar.
    2. Na seção Propriedades ListItem , defina Texto e Valor como Sim e defina Selecionado como True.
    3. Em Membros, clique em Adicionar novamente.
    4. Na seção Propriedades ListItem , defina Texto e Valor como Não e defina Selecionado como False.
    5. Em Membros, clique em Adicionar uma última vez.
    6. Na seção Propriedades ListItem , defina Texto e Valor como Talvez e defina Selecionado como False.
    7. Clique em OK para retornar ao arquivo .ascx no modo design . Observe que são exibidos três botões de rádio contidos no controle RadioButtonList: Sim, Não e Talvez.
  9. Posicione o cursor diretamente após o controle RadioButtonList e pressione ENTER para mover para a próxima linha na página.

  10. Clique e arraste um controle do Botão de Formulário Web da seção Web Forms da caixa de ferramentas e solte-o na página. O controle Button deve aparecer sozinho na linha após o controle RadioButtonList.

  11. Clique no controle Botão. No painel Propriedades , digite Enviar na propriedade Texto .

  12. Alterne para a exibição HTML e adicione a seguinte @OutputCache diretiva à parte superior da página:

    <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
    
  13. Clique com o botão direito do mouse no arquivo .ascx e clique em Exibir Código para exibir a fonte de página de código atrás.

  14. Adicione o seguinte código ao Page_Load evento, que define a CacheEntryTime propriedade do Text rótulo:

    private void Page_Load(object sender, System.EventArgs e)
    {
        CacheEntryTime.Text = "FragmentCtrl2: " + DateTime.Now.TimeOfDay.ToString();
    }
    

Criar o Formulário Web para conter os controles de usuário

Agora você pode criar o Formulário Web (.aspx) para conter o controle de usuário recém-desenvolvido. Para criar o Formulário Web, siga estas etapas:

  1. Adicione um novo Formulário Web chamado FragmentCaching.aspx ao seu projeto no Visual Studio .NET da seguinte maneira:

    1. Em Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto, aponte para Adicionar e clique em Adicionar Formulário Web.
    2. Nomeie o formulário web FragmentCaching.aspx e clique em Abrir.
  2. Verifique se a guia Design está selecionada. Clique e arraste um controle de Rótulo de Formulário Web da seção Web Forms da caixa de ferramentas e solte-o na página.

  3. Clique no controle Rótulo. No painel Propriedades , digite Tempo na propriedade ID e deixe a propriedade Text em branco.

  4. Posicione o cursor diretamente após o controle Rótulo e pressione ENTER para passar para a próxima linha na página.

  5. Arraste FragmentCtrl1.ascx e solte-o no Formulário Web para que ele seja posicionado após o controle Label em uma linha por si só. Posicione o cursor diretamente após o controle e pressione ENTER para mover para a próxima linha na página.

  6. Arraste FragmentCtrl2.ascx e solte-o no Formulário Web para que ele seja posicionado após FragmentCtrl1.ascx em uma linha por si só.

  7. No modo de exibição HTML, o Formulário 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>
    

    Observação

    Verifique se os controles são colocados dentro do

  8. Clique com o botão direito do mouse no arquivo .aspx e clique em Exibir Código para exibir a fonte da página de código atrás.

  9. Adicione o seguinte código ao Page_Load evento, que define a Time propriedade do Text rótulo:

    private void Page_Load(object sender, System.EventArgs e)
    {
        Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString();
    }
    
  10. No menu Arquivo , clique em Salvar Tudo para salvar os controles de usuário, o Formulário Web e outros arquivos de projeto associados.

  11. No menu Build no IDE (ambiente de desenvolvimento integrado) do Visual Studio .NET , clique em Compilar 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 brevemente por que o código executa do jeito que ele faz.

  1. No Gerenciador de Soluções do IDE do Visual Studio .NET, clique com o botão direito do mouse no FragmentCaching.aspx Web Form e clique em Exibir no Navegador para executar o código.

  2. Depois que a página for exibida no navegador, clique com o botão direito do mouse 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 estiver exibindo a página em um navegador externo ao IDE do .NET do Visual Studio.

    Observação

    O tempo no Formulário Web foi atualizado, mas os controles de usuário ainda exibem a hora em que a entrada de cache associada foi feita.

  3. No segundo controle, clique em Enviar. Observe que o controle exibe um tempo atualizado. Isso ocorre em resposta à configuração de atributo VaryByControl para o controle de usuário que faz referência ao controle RadioButtonList.

  4. Clique em Não e clique em Enviar novamente.

    Observação

    A hora é atualizada 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 Sem valor. Repita esta etapa, exceto com a opção Talvez . Você vê o mesmo comportamento.

  5. Clique em Sim e clique em Enviar novamente. Repita essa operação com as opções Não e Talvez .

    Essas seleções para o controle são armazenadas em cache e exibem o tempo de entrada do cache anterior. Se você continuar a clicar em Enviar além da configuração de duração da diretiva @ OutputCache , o tempo do controle de usuário será atualizado para cada seleção de valor específica para o controle RadioButtonList.

Observação

Não é o objetivo deste artigo abranger todas as configurações e cenários possíveis para cache de fragmentos.

Solução de problemas

  • Não tente manipular programaticamente um controle de usuário armazenado em cache de saída. Isso ocorre porque o controle só é criado dinamicamente quando é executado pela primeira vez antes da entrada de cache ocorrer. O cache de saída atende a todas as outras solicitações até que o controle expire.

  • Se o Formulário Web no qual os controles de usuário são hospedados tiver uma duração de cache de saída maior que as horas de duração dos controles de usuário, a configuração do Formulário Web dita o comportamento de cache dos controles.