Durchführen der Fragmentzwischenspeicherung in ASP.NET mit Visual C# .NET
In diesem Artikel wird beschrieben, wie Sie die Fragmentzwischenspeicherung in ASP.NET mit Visual C# .NET durchführen.
Ursprüngliche Produktversion: Microsoft ASP.NET
Ursprüngliche KB-Nummer: 308378
Zusammenfassung
In diesem Artikel wird die Implementierung der Fragmentzwischenspeicherung in ASP.NET veranschaulicht. Beim Zwischenspeichern von Fragmenten werden die Codefragmente eines Webformulars nicht direkt zwischengespeichert. Die Fragmentzwischenspeicherung bezieht sich auf das Zwischenspeichern einzelner Benutzersteuerelemente (ASCX) innerhalb eines Webformulars. Jedes Benutzersteuerelement kann über unabhängige Cachedauern und Implementierungen der Anwendung des Zwischenspeicherungsverhaltens verfügen. Der Beispielcode in diesem Artikel veranschaulicht, wie Sie diese Funktionalität erreichen.
Die Fragmentzwischenspeicherung ist nützlich, wenn Sie nur eine Teilmenge einer Seite zwischenspeichern müssen. Navigationsleisten, Kopf- und Fußzeilen eignen sich gut für die Fragmentzwischenspeicherung.
Anforderungen
- Windows 2000
- Internetinformationsserver (INTERNET Information Server, IIS)
- .NET Framework
- ASP.NET
Erstellen einer ASP.NET Webanwendung mit C# .NET
Die folgenden Schritte veranschaulichen, wie Sie eine neue ASP.NET Webanwendung mit dem Namen FragmentCache erstellen.
Öffnen Visual Studio .NET
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Klicken Sie im Dialogfeld Neue Project unter Project Typen auf Visual C#-Projekte, und klicken Sie dann unter Vorlagen auf ASP.NET Webanwendung.
Geben Sie im Feld Name FragmentCache ein. Wählen Sie im Feld "Speicherort" den entsprechenden Server aus. Wenn Sie den lokalen Server verwenden, können Sie den Servernamen als
http://localhost.
Erstellen der Benutzersteuerelemente
Dieser Abschnitt enthält den Beispielcode und die Erläuterungen der einzelnen Benutzersteuerelemente, die Sie in diesem Artikel verwenden werden. Sie können den Beispielcode wie beschrieben in die Datei associated.ascx und die CodeBehind-Seite kopieren und einfügen.
Benutzersteuerelement 1 (FragmentCtrl1.ascx)
Das folgende Benutzersteuerelement, FragmentCtrl1.ascx, ist einfach. FragmentCtrl1.ascx schreibt die Zeit aus, zu der der Cacheeintrag für das Element erfolgt. Wie bei allen Steuerelementen, die für diesen Artikel erstellt werden, wird eine grundlegende Beschreibung für das Steuerelement bereitgestellt, um die Unterscheidung der Einstellungen und der zugehörigen Verhaltensweisen zur Laufzeit in den späteren Abschnitten zu vereinfachen.
Erstellen Sie in Visual Studio .NET wie folgt ein neues Benutzersteuerelement:
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, zeigen Sie auf "Hinzufügen", und klicken Sie dann auf "Webbenutzersteuerelement hinzufügen".
- Benennen Sie das Steuerelement FragmentCtrl1.ascx, und klicken Sie dann auf Öffnen.
Stellen Sie sicher, dass die Registerkarte "Entwurf" ausgewählt ist. Klicken Und ziehen Sie ein Webformularbeschriftungs-Steuerelement aus dem Web Forms Abschnitt der Toolbox, und legen Sie das Bezeichnungsfeld-Steuerelement auf der Seite ab.
Klicken Sie auf das Bezeichnungsfeld-Steuerelement. Geben Sie im Eigenschaftenbereich der Visual Studio integrierten .NET-Entwicklungsumgebung (Integrated Development Environment, IDE) in der ID-Eigenschaft "CacheEntryTime" ein, und lassen Sie die Text-Eigenschaft leer.
Wechseln Sie zur HTML-Ansicht, und fügen Sie oben auf der Seite die folgende
@ OutputCacheDirektive hinzu:<%@ OutputCache Duration="40" VaryByParam="none"%>Klicken Sie mit der rechten Maustaste auf die ASCX-Datei, und klicken Sie dann auf Code anzeigen, um die CodeBehind-Seitenquelle anzuzeigen.
Fügen Sie dem Ereignis den folgenden Code hinzu, der
Page_Loaddie Eigenschaft der BezeichnungCacheEntryTimeTextfestlegt:private void Page_Load(object sender, System.EventArgs e) { CacheEntryTime.Text ="FragmentCtrl1: " + DateTime.Now.TimeOfDay.ToString(); }
Benutzersteuerelement 2 (FragmentCtrl2.ascx)
Obwohl Sie einfach eine andere Version des ersten Steuerelements mit einer anderen Cachedauer erstellen können, um zu zeigen, wie mehrere Benutzersteuerelemente unabhängige Verhaltensweisen auf derselben Seite haben können, macht dieser Abschnitt das zweite Steuerelement, FragmentCtrl2.ascx, interessanter. FragmentCtrl2.ascx wird verwendet, um das VaryByControl-Attribut einzuführen. VaryByControl ermöglicht das Erstellen unterschiedlicher Cacheeinträge basierend auf den Werten für ein angegebenes Steuerelement. Diese Funktionalität wird zur Laufzeit im nächsten Abschnitt deutlich übersichtlicher gemacht.
Erstellen Sie in Visual Studio .NET wie folgt ein neues Benutzersteuerelement:
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, zeigen Sie auf "Hinzufügen", und klicken Sie dann auf "Webbenutzersteuerelement hinzufügen".
- Benennen Sie das Steuerelement "FragmentCtrl2.ascx", und klicken Sie dann auf "Öffnen".
Stellen Sie sicher, dass die Registerkarte "Entwurf" ausgewählt ist. Klicken Sie auf ein Webformularbeschriftungs-Steuerelement, und ziehen Sie es aus dem Web Forms Abschnitt der Toolbox, und legen Sie es dann auf der Seite ab.
Klicken Sie auf das Bezeichnungsfeld-Steuerelement. Geben Sie im Eigenschaftenbereich "CacheEntryTime" in die ID-Eigenschaft ein, und lassen Sie die Text-Eigenschaft leer.
Positionieren Sie den Cursor direkt hinter dem Label-Steuerelement, und drücken Sie dann die EINGABETASTE, um zur nächsten Zeile auf der Seite zu wechseln.
Klicken Und ziehen Sie ein Webformular-RadioButtonList-Steuerelement aus dem Web Forms Abschnitt der Toolbox, und legen Sie es auf der Seite ab. Das RadioButtonList-Steuerelement sollte allein in der Zeile nach dem Bezeichnungsfeld-Steuerelement angezeigt werden.
Klicken Sie auf das RadioButtonList-Steuerelement. Geben Sie im Eigenschaftenbereich "MyRadioButtonList" in die ID-Eigenschaft ein.
Suchen Sie im Eigenschaftenbereich die Items-Eigenschaft für das Steuerelement MyRadioButtonList, klicken Sie auf Sammlung und dann auf die Schaltfläche mit den Auslassungspunkten (...) neben der Auflistung.
Fügen Sie im Fenster ListItem-Auflistungs-Editor listItem-Elemente wie folgt hinzu:
- Klicken Sie unter Mitglieder auf Hinzufügen.
- Legen Sie im Abschnitt "ListItem-Eigenschaften" Text und Wert auf "Ja" und "Selected" auf "True" fest.
- Klicken Sie unter "Mitglieder" erneut auf "Hinzufügen".
- Legen Sie im Abschnitt "ListItem-Eigenschaften" Text und Wert auf "Nein" und "Selected" auf "False" fest.
- Klicken Sie unter "Elemente" ein letztes Mal auf "Hinzufügen".
- Legen Sie im Abschnitt "ListItem-Eigenschaften" Text und Wert auf "Vielleicht" fest, und legen Sie "Selected" auf "False" fest.
- Klicken Sie auf "OK", um zur ASCX-Datei in der Entwurfsansicht zurückzukehren. Beachten Sie, dass drei Optionsfelder angezeigt werden, die im RadioButtonList -Steuerelement enthalten sind: Ja, Nein und Vielleicht.
Positionieren Sie den Cursor direkt hinter dem RadioButtonList-Steuerelement, und drücken Sie die EINGABETASTE, um zur nächsten Zeile auf der Seite zu wechseln.
Klicken Und ziehen Sie ein Webformular-Schaltflächen-Steuerelement aus dem Web Forms Abschnitt der Toolbox, und legen Sie es auf der Seite ab. Das Schaltflächensteuerelement sollte allein in der Zeile nach dem RadioButtonList-Steuerelement angezeigt werden.
Klicken Sie auf das Schaltflächensteuerelement. Geben Sie im Eigenschaftenbereich "Submit" in der Text-Eigenschaft ein.
Wechseln Sie zur HTML-Ansicht, und fügen Sie oben auf der Seite die folgende
@OutputCacheDirektive hinzu:<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>Klicken Sie mit der rechten Maustaste auf die ASCX-Datei, und klicken Sie dann auf Code anzeigen, um die CodeBehind-Seitenquelle anzuzeigen.
Fügen Sie dem Ereignis den folgenden Code hinzu, der
Page_Loaddie Eigenschaft der BezeichnungCacheEntryTimeTextfestlegt:private void Page_Load(object sender, System.EventArgs e) { CacheEntryTime.Text = "FragmentCtrl2: " + DateTime.Now.TimeOfDay.ToString(); }
Erstellen des Webformulars für die Benutzersteuerelemente
Sie können nun das Webformular (ASPX) erstellen, das das neu entwickelte Benutzersteuerelement enthält. Gehen Sie folgendermaßen vor, um das Webformular zu erstellen:
Fügen Sie ihrem Projekt in Visual Studio .NET wie folgt ein neues Webformular mit dem Namen "FragmentCaching.aspx" hinzu:
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, zeigen Sie auf "Hinzufügen", und klicken Sie dann auf "Webformular hinzufügen".
- Benennen Sie das Webformular "FragmentCaching.aspx", und klicken Sie dann auf "Öffnen".
Stellen Sie sicher, dass die Registerkarte "Entwurf" ausgewählt ist. Klicken Und ziehen Sie ein Webformularbeschriftungs-Steuerelement aus dem Web Forms Abschnitt der Toolbox, und legen Sie es auf der Seite ab.
Klicken Sie auf das Bezeichnungsfeld-Steuerelement. Geben Sie im Eigenschaftenbereich "Time" in der ID-Eigenschaft ein, und lassen Sie die Text-Eigenschaft leer.
Positionieren Sie den Cursor direkt hinter dem Bezeichnungsfeld-Steuerelement, und drücken Sie die EINGABETASTE, um zur nächsten Zeile auf der Seite zu gelangen.
Ziehen Sie FragmentCtrl1.ascx, und legen Sie es auf dem Webformular ab, sodass es nach dem Bezeichnungsfeld-Steuerelement in einer Zeile positioniert wird. Positionieren Sie den Cursor direkt hinter dem Steuerelement, und drücken Sie die EINGABETASTE, um zur nächsten Zeile auf der Seite zu wechseln.
Ziehen Sie FragmentCtrl2.ascx und legen Sie es in das Webformular ein, sodass es nach FragmentCtrl1.ascx in einer Zeile positioniert wird.
In der HTML-Ansicht sollte das Webformular ähnlich wie der folgende Code aussehen:
<%@ 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>Hinweis
Stellen Sie sicher, dass die Steuerelemente in der
Klicken Sie mit der rechten Maustaste auf die ASPX-Datei, und klicken Sie dann auf Code anzeigen, um die CodeBehind-Seitenquelle anzuzeigen.
Fügen Sie dem Ereignis den folgenden Code hinzu, der
Page_Loaddie Eigenschaft der BezeichnungTimeTextfestlegt:private void Page_Load(object sender, System.EventArgs e) { Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString(); }Klicken Sie im Menü "Datei" auf "Alle speichern", um die Benutzersteuerelemente, das Webformular und andere zugeordnete Projektdateien zu speichern.
Klicken Sie im Menü "Erstellen" in der Visual Studio integrierten .NET-Entwicklungsumgebung (Integrated Development Environment, IDE) auf "Erstellen", um das Projekt zu erstellen.
Ausführen des Beispiels
In diesem Abschnitt wird veranschaulicht, wie der Code zur Laufzeit angezeigt wird, um das Zwischenspeicherungsverhalten zu beobachten, und anschließend wird kurz beschrieben, warum der Code die gleiche Vorgehensweise ausführt.
Klicken Sie im Visual Studio .NET IDE-Projektmappen-Explorer mit der rechten Maustaste auf das Webformular "FragmentCaching.aspx", und klicken Sie dann im Browser auf "Anzeigen", um den Code auszuführen.
Nachdem die Seite im Browser angezeigt wurde, klicken Sie mit der rechten Maustaste auf die Seite, und klicken Sie dann auf "Aktualisieren", um die Seite zu aktualisieren. Sie können auch die F5-Taste drücken, um die Seite zu aktualisieren, wenn Sie die Seite in einem Browser anzeigen, der sich außerhalb des Visual Studio .NET-IDE befindet.
Hinweis
Die Zeit im Webformular wurde aktualisiert, aber die Benutzersteuerelemente zeigen weiterhin den Zeitpunkt an, zu dem der zugeordnete Cacheeintrag vorgenommen wurde.
Klicken Sie im zweiten Steuerelement auf "Absenden". Beachten Sie, dass das Steuerelement eine aktualisierte Uhrzeit anzeigt. Dies ist eine Reaktion auf die VaryByControl-Attributeinstellung für das Benutzersteuerelement, das auf das RadioButtonList-Steuerelement verweist.
Klicken Sie auf "Nein", und klicken Sie dann erneut auf "Absenden".
Hinweis
Die Zeit wird erneut auf der Anzeige des Benutzersteuerelements aktualisiert. Dies liegt daran, dass für das Steuerelement basierend auf dieser Einstellung "Kein Wert" ein neuer Cacheeintrag erstellt wird. Wiederholen Sie diesen Schritt mit Ausnahme der Option "Vielleicht". Sie sehen das gleiche Verhalten.
Klicken Sie auf "Ja", und klicken Sie dann erneut auf "Absenden". Wiederholen Sie diesen Vorgang mit den Optionen "Nein" und "Vielleicht".
Diese Auswahlen für das Steuerelement werden zwischengespeichert und zeigen den vorherigen Cacheeintrag an. Wenn Sie weiterhin auf "Submit past the @ OutputCache directive's duration" klicken, wird die Zeit des Benutzersteuerelements für jede bestimmte Wertauswahl für das RadioButtonList-Steuerelement aktualisiert.
Hinweis
Es ist nicht das Ziel dieses Artikels, alle möglichen Einstellungen und Szenarien für die Fragmentzwischenspeicherung zu behandeln.
Problembehandlung
Versuchen Sie nicht, ein Benutzersteuerelement programmgesteuert zu bearbeiten, das im Ausgabecache gespeichert ist. Dies liegt daran, dass das Steuerelement nur dynamisch erstellt wird, wenn es zum ersten Mal ausgeführt wird, bevor der Cacheeintrag erfolgt. Der Ausgabecache erfüllt alle anderen Anforderungen, bis das Steuerelement abläuft.
Wenn das Webformular, in dem Benutzersteuerelemente gehostet werden, eine Ausgabecachedauer aufweist, die länger als die Dauer der Benutzersteuerelemente ist, bestimmt die Einstellung des Webformulars das Zwischenspeicherungsverhalten der Steuerelemente.