Fragmentcaching uitvoeren in ASP.NET met behulp van Visual C# .NET

In dit artikel wordt beschreven hoe u fragmentcaching uitvoert in ASP.NET met behulp van Visual C# .NET.

Oorspronkelijke productversie: Microsoft ASP.NET
Origineel KB-nummer: 308378

Samenvatting

In dit artikel wordt gedemonstreerd hoe u fragmentcaching implementeert in ASP.NET. In de cache van fragmenten worden de codefragmenten van een webformulier niet rechtstreeks in de cache opgeslagen. fragmentcaching verwijst naar het opslaan van afzonderlijke gebruikersbesturingselementen (.ascx) in een webformulier. Elk gebruikersbeheer kan onafhankelijke cacheduur en implementaties hebben van hoe het cachegedrag moet worden toegepast. De voorbeeldcode in dit artikel laat zien hoe u deze functionaliteit kunt bereiken.

Het opslaan van fragmenten in de cache is handig wanneer u alleen een subset van een pagina in de cache wilt opslaan. Navigatiebalken, kopteksten en voetteksten zijn goede kandidaten voor het opslaan van fragmenten in de cache.

Vereisten

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

Een ASP.NET-webtoepassing maken met C# .NET

De volgende stappen laten zien hoe u een nieuwe ASP.NET webtoepassing met de naam FragmentCache maakt.

  1. Visual Studio .NET openen

  2. Wijs in het menu Bestand naar Nieuw en klik vervolgens op Project.

  3. Klik in het dialoogvenster Nieuw project op Visual C#-projecten onder Projecttypen en klik vervolgens op ASP.NET Webtoepassing onder Sjablonen.

  4. Typ FragmentCache in het vak Naam. Selecteer in het vak Locatie de juiste server. Als u de lokale server gebruikt, kunt u de servernaam laten staan als http://localhost.

De besturingselementen voor gebruikers maken

Deze sectie bevat de voorbeeldcode en uitleg van elk gebruikersbeheer dat u in dit artikel gaat gebruiken. U kunt de voorbeeldcode kopiëren en plakken in het bestand associated.ascx en de code-behind-pagina zoals beschreven.

Gebruikersbeheer 1 (FragmentCtrl1.ascx)

Het volgende gebruikersbeheer, FragmentCtrl1.ascx, is eenvoudig. FragmentCtrl1.ascx schrijft de tijd uit waarop de cachevermelding voor het item plaatsvindt. Net als bij alle besturingselementen die voor dit artikel zijn gemaakt, wordt een basisbeschrijving voor het besturingselement gegeven, zodat u de instellingen en het bijbehorende gedrag tijdens de uitvoering gemakkelijker kunt onderscheiden in de latere secties.

  1. Maak in Visual Studio .NET als volgt een nieuw gebruikersbeheer:

    1. Klik in Solution Explorer met de rechtermuisknop op het projectknooppunt, wijs Toevoegen aan en klik vervolgens op Webgebruikersbesturingselement toevoegen.
    2. Geef het besturingselement de naam FragmentCtrl1.ascx en klik vervolgens op Openen.
  2. Zorg ervoor dat het tabblad Ontwerpen is geselecteerd. Klik en sleep een besturingselement Webformulierlabel uit de sectie Web Forms van de werkset en zet het besturingselement Label op de pagina neer.

  3. Klik op het besturingselement Label. Typ CacheEntryTime in het deelvenster Eigenschappen van visual Studio .NET Integrated Development Environment (IDE) in de eigenschap ID en laat de eigenschap Text leeg.

  4. Schakel over naar de HTML-weergave en voeg de volgende @ OutputCache instructie toe aan de bovenkant van de pagina:

    <%@ OutputCache Duration="40" VaryByParam="none"%>
    
  5. Klik met de rechtermuisknop op het ASCX-bestand en klik vervolgens op Code weergeven om de code achter de paginabron weer te geven.

  6. Voeg de volgende code toe aan de Page_Load gebeurtenis, waarmee de eigenschap van Text het CacheEntryTime label wordt ingesteld:

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

Gebruikersbeheer 2 (FragmentCtrl2.ascx)

Hoewel u eenvoudig een andere versie van het eerste besturingselement met een andere cacheduur kunt maken om te laten zien hoe meerdere gebruikersbesturingselementen onafhankelijk gedrag kunnen hebben op dezelfde pagina, maakt deze sectie het tweede besturingselement FragmentCtrl2.ascx interessanter. FragmentCtrl2.ascx wordt gebruikt om het kenmerk VaryByControl te introduceren. Met VaryByControl kunnen verschillende cachevermeldingen worden gemaakt op basis van de waarden voor een opgegeven besturingselement. Deze functionaliteit wordt in de volgende sectie veel duidelijker gemaakt tijdens de uitvoering.

  1. Maak in Visual Studio .NET als volgt een nieuw gebruikersbeheer:

    1. Klik in Solution Explorer met de rechtermuisknop op het projectknooppunt, wijs Toevoegen aan en klik vervolgens op Webgebruikersbesturingselement toevoegen.
    2. Geef het besturingselement de naam FragmentCtrl2.ascx en klik vervolgens op Openen.
  2. Zorg ervoor dat het tabblad Ontwerpen is geselecteerd. Klik en sleep een besturingselement Webformulierlabel uit de sectie Web Forms van de werkset en zet het besturingselement Label op de pagina neer.

  3. Klik op het besturingselement Label. Typ CacheEntryTime in het deelvenster Eigenschappen in de eigenschap ID en laat de eigenschap Text leeg.

  4. Plaats de cursor direct na het besturingselement Label en druk op Enter om naar de volgende regel op de pagina te gaan.

  5. Klik en sleep een besturingselement Keuzerondjelijst voor webformulieren uit de sectie Web Forms van de werkset en zet het neer op de pagina. Het besturingselement RadioButtonList moet vanzelf worden weergegeven op de regel na het besturingselement Label.

  6. Klik op het besturingselement KeuzerondjeLijst. Typ in het deelvenster EigenschappenMyRadioButtonList in de eigenschap ID .

  7. Zoek in het deelvenster Eigenschappen de eigenschap Items voor het besturingselement MyRadioButtonList , klik op Verzameling en klik vervolgens op het beletselteken (...) dat naast Verzameling wordt weergegeven.

  8. Voeg in het venster ListItem Collection Editorals volgt ListItem-leden toe:

    1. Klik onder Leden op Toevoegen.
    2. Stel in de sectie ListItem-eigenschappen Tekst en Waarde in op Ja en stel Geselecteerd in op Waar.
    3. Klik onder Leden nogmaals op Toevoegen .
    4. Stel in de sectie ListItem-eigenschappen Tekst en Waarde in op Nee en stel Geselecteerd in op Onwaar.
    5. Klik onder Leden op Nog één keer toevoegen.
    6. Stel in de sectie ListItem-eigenschappen Tekst en Waarde in op Misschien en stel Geselecteerd in op Onwaar.
    7. Klik op OK om terug te keren naar het ASCX-bestand in de ontwerpweergave . U ziet dat er drie keuzerondjes worden weergegeven in het besturingselement KeuzerondjeLijst: Ja, Nee en Misschien.
  9. Plaats de cursor direct na het besturingselement KeuzerondjeLijst en druk op Enter om naar de volgende regel op de pagina te gaan.

  10. Klik en sleep een besturingselement Webformulierknop uit de sectie Web Forms van de werkset en zet het neer op de pagina. Het besturingselement Knop moet vanzelf worden weergegeven op de regel na het besturingselement KeuzerondjeLijst.

  11. Klik op het besturingselement Knop. Typ verzenden in het deelvenster Eigenschappen in de eigenschap Tekst.

  12. Schakel over naar de HTML-weergave en voeg de volgende @OutputCache instructie toe aan de bovenkant van de pagina:

    <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
    
  13. Klik met de rechtermuisknop op het ASCX-bestand en klik vervolgens op Code weergeven om de code achter de paginabron weer te geven.

  14. Voeg de volgende code toe aan de Page_Load gebeurtenis, waarmee de eigenschap van Text het CacheEntryTime label wordt ingesteld:

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

Het webformulier maken om de besturingselementen van de gebruiker te bevatten

U kunt nu het webformulier (.aspx) maken om het zojuist ontwikkelde gebruikersbesturingselement te bevatten. Voer de volgende stappen uit om het webformulier te maken:

  1. Voeg als volgt een nieuw webformulier met de naam FragmentCaching.aspx toe aan uw project in Visual Studio .NET :

    1. Klik in Solution Explorer met de rechtermuisknop op het projectknooppunt, wijs Toevoegen aan en klik vervolgens op Webformulier toevoegen.
    2. Geef het webformulier de naam FragmentCaching.aspx en klik vervolgens op Openen.
  2. Zorg ervoor dat het tabblad Ontwerpen is geselecteerd. Klik en sleep een besturingselement Webformulierlabel uit de sectie Web Forms van de werkset en zet het neer op de pagina.

  3. Klik op het besturingselement Label. Typ tijd in het deelvenster Eigenschappen in de eigenschap ID en laat de eigenschap Text leeg.

  4. Plaats de cursor direct na het besturingselement Label en druk op Enter om naar de volgende regel op de pagina te gaan.

  5. Sleep FragmentCtrl1.ascx en zet het neer op het webformulier, zodat het na het besturingselement Label op een regel wordt geplaatst. Plaats de cursor direct achter het besturingselement en druk op Enter om naar de volgende regel op de pagina te gaan.

  6. Sleep FragmentCtrl2.ascx en zet het neer op het webformulier, zodat het na FragmentCtrl1.ascx op een regel wordt geplaatst.

  7. In de HTML-weergave moet het webformulier er ongeveer uitzien als de volgende code:

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

    Opmerking

    Zorg ervoor dat de besturingselementen in de

  8. Klik met de rechtermuisknop op het .aspx-bestand en klik vervolgens op Code weergeven om de code achter de paginabron weer te geven.

  9. Voeg de volgende code toe aan de Page_Load gebeurtenis, waarmee de eigenschap van Text het Time label wordt ingesteld:

    private void Page_Load(object sender, System.EventArgs e)
    {
        Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString();
    }
    
  10. Klik in het menu Bestand op Alles opslaan om de besturingselementen van de gebruiker, het webformulier en andere bijbehorende projectbestanden op te slaan.

  11. Klik in het menu Build in Visual Studio .NET Integrated Development Environment (IDE) op Bouwen om het project te bouwen.

Het voorbeeld uitvoeren

In deze sectie ziet u hoe u de code tijdens runtime kunt bekijken om getuige te zijn van het cachegedrag. Vervolgens wordt kort beschreven waarom de code op dezelfde manier wordt uitgevoerd.

  1. Klik in de Visual Studio .NET IDE-Solution Explorer met de rechtermuisknop op het FragmentCaching.aspx webformulier en klik vervolgens op Weergeven in browser om de code uit te voeren.

  2. Nadat de pagina in de browser wordt weergegeven, klikt u met de rechtermuisknop op de pagina en klikt u vervolgens op Vernieuwen om de pagina te vernieuwen. U kunt ook op F5 drukken om de pagina te vernieuwen als u de pagina bekijkt in een browser die zich buiten visual Studio .NET IDE bevindt.

    Opmerking

    De tijd op het webformulier is bijgewerkt, maar de besturingselementen van de gebruiker geven nog steeds de tijd weer waarop de bijbehorende cachevermelding is gemaakt.

  3. Klik in het tweede besturingselement op Verzenden. U ziet dat het besturingselement een bijgewerkte tijd weergeeft. Dit is een reactie op de kenmerkinstelling VaryByControl voor het gebruikersbesturingselement dat verwijst naar het besturingselement RadioButtonList.

  4. Klik op Nee en klik vervolgens nogmaals op Verzenden .

    Opmerking

    De tijd wordt opnieuw bijgewerkt in de weergave van het gebruikersbeheer. Dit komt doordat er een nieuwe cachevermelding wordt gemaakt voor het besturingselement op basis van deze instelling Geen waarde. Herhaal deze stap, behalve met de optie Misschien . U ziet hetzelfde gedrag.

  5. Klik op Ja en klik vervolgens nogmaals op Verzenden . Herhaal deze bewerking met de opties Nee en Misschien .

    Deze selecties voor het besturingselement worden opgeslagen in de cache en geven de vorige cacheinvoertijd weer. Als u blijft klikken op Verzenden na de duurinstelling van de instructie @ OutputCache , wordt de tijd van het gebruikersbesturingselement bijgewerkt voor elke specifieke waardeselectie voor het besturingselement RadioButtonList.

Opmerking

Het is niet het doel van dit artikel om alle mogelijke instellingen en scenario's voor het opslaan van fragmenten in de cache te behandelen.

Probleemoplossing

  • Probeer niet programmatisch een gebruikersbesturingselement te manipuleren dat in de uitvoercache is opgeslagen. Dit komt doordat het besturingselement alleen dynamisch wordt gemaakt wanneer het de eerste keer wordt uitgevoerd voordat de cachevermelding plaatsvindt. De uitvoercache voldoet aan alle andere aanvragen totdat het besturingselement verloopt.

  • Als het webformulier waarin gebruikersbesturingselementen worden gehost een uitvoercacheduur heeft die langer is dan de duurtijden van de gebruikersbesturingselementen, bepaalt de instelling van het webformulier het cachegedrag van de besturingselementen.