Eseguire la memorizzazione nella cache dei frammenti in ASP.NET usando Visual C# .NET

Questo articolo descrive come eseguire la memorizzazione nella cache dei frammenti in ASP.NET usando Visual C# .NET.

Versione originale del prodotto: Microsoft ASP.NET
Numero KB originale: 308378

Riepilogo

Questo articolo illustra come implementare la memorizzazione nella cache dei frammenti in ASP.NET. La memorizzazione nella cache dei frammenti non memorizza nella cache direttamente i frammenti di codice di un Web Form; La memorizzazione nella cache dei frammenti si riferisce alla memorizzazione nella cache di singoli controlli utente (con estensione ascx) all'interno di un Web Form. Ogni controllo utente può avere durate della cache indipendenti e implementazioni di come deve essere applicato il comportamento di memorizzazione nella cache. Il codice di esempio in questo articolo illustra come ottenere questa funzionalità.

La memorizzazione nella cache dei frammenti è utile quando è necessario memorizzare nella cache solo un subset di una pagina. Le barre di spostamento, l'intestazione e i piè di pagina sono buoni candidati per la memorizzazione nella cache dei frammenti.

Requisiti

  • Windows 2000
  • Internet Information Server (IIS)
  • .NET Framework
  • ASP.NET

Creare un'applicazione Web ASP.NET con C# .NET

La procedura seguente illustra come creare una nuova applicazione Web ASP.NET denominata FragmentCache.

  1. Aprire Visual Studio .NET

  2. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  3. Nella finestra di dialogo Nuovo progetto fare clic su Progetti Visual C# in Tipi di progetto e quindi fare clic su ASP.NET'applicazione Web in Modelli.

  4. Nella casella Nome digitare FragmentCache. Nella casella Percorso selezionare il server appropriato. Se si usa il server locale, è possibile lasciare il nome del server come http://localhost.

Creare i controlli utente

Questa sezione fornisce il codice di esempio e le spiegazioni di ogni controllo utente che verrà usato in questo articolo. È possibile copiare e incollare il codice di esempio nel file associated.ascx e nella pagina code-behind, come descritto.

Controllo utente 1 (FragmentCtrl1.ascx)

Il controllo utente seguente, FragmentCtrl1.ascx, è semplice. FragmentCtrl1.ascx scrive il tempo in cui si verifica la voce della cache per l'elemento. Come per tutti i controlli creati per questo articolo, viene fornita una descrizione di base per il controllo per semplificare la distinzione delle impostazioni e dei comportamenti associati in fase di esecuzione nelle sezioni successive.

  1. In Visual Studio .NET creare un nuovo controllo utente come indicato di seguito:

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto, scegliere Aggiungi e quindi fare clic su Aggiungi controllo utente Web.
    2. Assegnare al controllo il nome FragmentCtrl1.ascx e quindi fare clic su Apri.
  2. Assicurarsi che la scheda Progettazione sia selezionata. Fare clic e trascinare un controllo Etichetta web form dalla sezione Web Forms della casella degli strumenti e rilasciare il controllo Etichetta nella pagina.

  3. Fare clic sul controllo Etichetta. Nel riquadro Proprietà dell'ambiente di sviluppo integrato (IDE) di Visual Studio .NET digitare CacheEntryTime nella proprietà ID e lasciare vuota la proprietà Text .

  4. Passare alla visualizzazione HTML e aggiungere la direttiva seguente @ OutputCache all'inizio della pagina:

    <%@ OutputCache Duration="40" VaryByParam="none"%>
    
  5. Fare clic con il pulsante destro del mouse sul file ascx e quindi scegliere Visualizza codice per visualizzare l'origine della pagina code-behind.

  6. Aggiungere il codice seguente all'evento Page_Load , che imposta la CacheEntryTime proprietà dell'etichetta Text :

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

Controllo utente 2 (FragmentCtrl2.ascx)

Anche se è possibile creare semplicemente un'altra versione del primo controllo con una durata della cache diversa per mostrare come più controlli utente possono avere comportamenti indipendenti nella stessa pagina, questa sezione rende più interessante il secondo controllo , FragmentCtrl2.ascx. FragmentCtrl2.ascx viene usato per introdurre l'attributo VaryByControl . VaryByControl consente di creare voci della cache diverse in base ai valori per un controllo specificato. Questa funzionalità è resa molto più chiara in fase di esecuzione nella sezione successiva.

  1. In Visual Studio .NET creare un nuovo controllo utente come indicato di seguito:

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto, scegliere Aggiungi e quindi fare clic su Aggiungi controllo utente Web.
    2. Assegnare al controllo il nome FragmentCtrl2.ascx e quindi fare clic su Apri.
  2. Assicurarsi che la scheda Progettazione sia selezionata. Fare clic e trascinare un controllo Etichetta web form dalla sezione Web Forms della casella degli strumenti e quindi rilasciare il controllo Etichetta nella pagina.

  3. Fare clic sul controllo Etichetta. Nel riquadro Proprietà digitare CacheEntryTime nella proprietà ID e lasciare vuota la proprietà Text .

  4. Posizionare il cursore direttamente dopo il controllo Etichetta e quindi premere INVIO per passare alla riga successiva della pagina.

  5. Fare clic e trascinare un controllo RadioButtonList del Web Form dalla sezione Web Forms della casella degli strumenti e rilasciarlo nella pagina. Il controllo RadioButtonList deve essere visualizzato da solo sulla riga dopo il controllo Label.

  6. Fare clic sul controllo RadioButtonList. Nel riquadro Proprietà digitare MyRadioButtonList nella proprietà ID .

  7. Nel riquadro Proprietà individuare la proprietà Items per il controllo MyRadioButtonList , fare clic su Raccolta e quindi fare clic sul pulsante con i puntini di sospensione (...) visualizzato accanto a Raccolta.

  8. Nella finestra Editor Raccolta ListItem aggiungere i membri ListItem come indicato di seguito:

    1. In Membri, fare clic su Aggiungi.
    2. Nella sezione Proprietà ListItem impostare Testo e Valore su e Selezionare su True.
    3. In Membri fare di nuovo clic su Aggiungi .
    4. Nella sezione proprietà ListItem impostare Text e Value su No e selected su False.
    5. In Membri fare clic su Aggiungi un'ultima volta.
    6. Nella sezione proprietà ListItem impostare Text e Value su Maybe e Selected su False.
    7. Fare clic su OK per tornare al file ascx nella visualizzazione Struttura . Si noti che vengono visualizzati tre pulsanti di opzione contenuti nel controllo RadioButtonList: , No e Forse.
  9. Posizionare il cursore direttamente dopo il controllo RadioButtonList e premere INVIO per passare alla riga successiva della pagina.

  10. Fare clic e trascinare un controllo Pulsante Web Form dalla sezione Web Forms della casella degli strumenti e rilasciarlo nella pagina. Il controllo Button deve essere visualizzato automaticamente sulla riga dopo il controllo RadioButtonList.

  11. Fare clic sul controllo Pulsante. Nel riquadro Proprietà digitare Submit nella proprietà Text .

  12. Passare alla visualizzazione HTML e aggiungere la direttiva seguente @OutputCache all'inizio della pagina:

    <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
    
  13. Fare clic con il pulsante destro del mouse sul file ascx e quindi scegliere Visualizza codice per visualizzare l'origine della pagina code-behind.

  14. Aggiungere il codice seguente all'evento Page_Load , che imposta la CacheEntryTime proprietà dell'etichetta Text :

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

Creare il Web Form per contenere i controlli utente

È ora possibile creare il Web Form (.aspx) per contenere il controllo utente appena sviluppato. Per creare il Web Form, seguire questa procedura:

  1. Aggiungere un nuovo Web Form denominato FragmentCaching.aspx al progetto in Visual Studio .NET come indicato di seguito:

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto, scegliere Aggiungi e quindi fare clic su Aggiungi web form.
    2. Assegnare al Web Form il nome FragmentCaching.aspx e quindi fare clic su Apri.
  2. Assicurarsi che la scheda Progettazione sia selezionata. Fare clic e trascinare un controllo Etichetta web form dalla sezione Web Forms della casella degli strumenti e rilasciarlo nella pagina.

  3. Fare clic sul controllo Etichetta. Nel riquadro Proprietà digitare Time nella proprietà ID e lasciare vuota la proprietà Text .

  4. Posizionare il cursore direttamente dopo il controllo Etichetta e premere INVIO per passare alla riga successiva della pagina.

  5. Trascinare FragmentCtrl1.ascx e rilasciarlo nel Web Form in modo che venga posizionato dopo il controllo Label su una riga da solo. Posizionare il cursore direttamente dopo il controllo e premere INVIO per passare alla riga successiva della pagina.

  6. Trascinare FragmentCtrl2.ascx e rilasciarlo nel Web Form in modo che venga posizionato dopo FragmentCtrl1.ascx su una riga da solo.

  7. Nella visualizzazione HTML il Web Form dovrebbe essere simile al codice seguente:

    <%@ 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

    Assicurarsi che i controlli siano posizionati all'interno di

  8. Fare clic con il pulsante destro del mouse sul file .aspx e quindi scegliere Visualizza codice per visualizzare l'origine della pagina code-behind.

  9. Aggiungere il codice seguente all'evento Page_Load , che imposta la Time proprietà dell'etichetta Text :

    private void Page_Load(object sender, System.EventArgs e)
    {
        Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString();
    }
    
  10. Dal menu File fare clic su Salva tutto per salvare i controlli utente, il Web Form e altri file di progetto associati.

  11. Dal menu Compilanell'ambiente di sviluppo integrato (IDE) di Visual Studio .NET fare clic su Compila per compilare il progetto.

Eseguire l'esempio

Questa sezione illustra come visualizzare il codice in fase di esecuzione per verificare il comportamento di memorizzazione nella cache e quindi descrive brevemente il motivo per cui il codice esegue la procedura.

  1. Nella Esplora soluzioni IDE di Visual Studio .NET fare clic con il pulsante destro del mouse sul Web Form FragmentCaching.aspx e quindi scegliere Visualizza nel browser per eseguire il codice.

  2. Dopo aver visualizzato la pagina nel browser, fare clic con il pulsante destro del mouse sulla pagina e quindi scegliere Aggiorna per aggiornare la pagina. È anche possibile premere F5 per aggiornare la pagina se si visualizza la pagina in un browser esterno all'IDE di Visual Studio .NET.

    Nota

    L'ora del Web Form è stata aggiornata, ma i controlli utente visualizzano comunque l'ora in cui è stata effettuata la voce della cache associata.

  3. Nel secondo controllo fare clic su Invia. Si noti che il controllo visualizza un'ora aggiornata. Si tratta di una risposta all'impostazione dell'attributo VaryByControl per il controllo utente che fa riferimento al controllo RadioButtonList.

  4. Fare clic su No e quindi su Invia di nuovo.

    Nota

    L'ora viene aggiornata di nuovo nella visualizzazione del controllo utente. Ciò avviene perché viene creata una nuova voce della cache per il controllo in base all'impostazione Nessun valore. Ripetere questo passaggio tranne con l'opzione Forse . Viene visualizzato lo stesso comportamento.

  5. Fare clic su e quindi su Invia di nuovo. Ripetere questa operazione con le opzioni No e Maybe .

    Queste selezioni per il controllo vengono memorizzate nella cache e visualizzano l'ora di immissione della cache precedente. Se si continua a fare clic su Invia dopo l'impostazione della durata della direttiva @ OutputCache , l'ora del controllo utente viene aggiornata per ogni selezione di valore specifica per il controllo RadioButtonList.

Nota

Questo articolo non descrive tutte le impostazioni e gli scenari possibili per la memorizzazione nella cache dei frammenti.

Risoluzione dei problemi

  • Non provare a modificare a livello di codice un controllo utente memorizzato nella cache di output. Questo perché il controllo viene creato in modo dinamico solo quando viene eseguito la prima volta prima che si verifichi la voce della cache. La cache di output soddisfa tutte le altre richieste fino alla scadenza del controllo.

  • Se il Web Form in cui sono ospitati i controlli utente ha una durata della cache di output superiore alla durata dei controlli utente, l'impostazione del Web Form determina il comportamento di memorizzazione nella cache dei controlli.