15.2 Teile von Seiten cachen
 
Wenn Sie eine Seite nicht komplett cachen können, weil sich einzelne Bestandteile stets ändern, dann können Sie trotzdem vom Caching profitieren, indem Sie diejenigen Bestandteile, die relativ konstant sind, in Webbenutzersteuerelementen ablegen. Innerhalb eines solchen Webbenutzersteuerelements können Sie dann ebenfalls die OutputCache-Direktive angeben.
Hier wieder ein simples Beispiel. Die Datei cache_04.aspx zeigt die Uhrzeit ungecacht an. Außerdem bindet die Seite das Webbenutzersteuerelement cache_04.ascx ein. cache_04.ascx macht auch nichts anderes, als die Uhrzeit anzuzeigen, aber dieses Steuerelement wird zehn Sekunden lang in einem Cache gehalten. Das Resultat: Die obere Uhrzeit, die direkt in der Seite gerendert wird, ändert sich bei jedem Reload. Die untere Uhrzeit, die aus dem gecachten Steuerelement stammt, ändert sich jeweils frühestens nach Ablauf von zehn Sekunden. Wie in Abbildung 15.3 zu sehen ist, werden also meistens unterschiedliche Uhrzeiten angezeigt.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 15.3 Seiten lassen sich teilweise cachen, indem Fragmente in Benutzersteuerelemente ausgelagert werden.
<!-- cache_04.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ Register Tagprefix="mlohrer"
Tagname="uhrzeit"
src="cache_04.ascx" %>
<html><head>
<title>Ein Webbenutzersteuerelement cachen</title>
</head><body>
<h3>Ein Webbenutzersteuerelement cachen</h3>
<p>Ungecacht ist es jetzt
<% = now.ToLongTimeString() %> Uhr.</p>
<mlohrer:uhrzeit runat="server" />
</body></html>
<!-- cache_04.ascx -->
<%@ Control %>
<%@ OutputCache Duration="10" VaryByParam="none" %>
<p>Mit Cache ist es jetzt
<% = now.ToLongTimeString() %> Uhr.</p>
Die OutputCache-Attribute VaryByHeader und Location können Sie nicht in Benutzersteuerelementen verwenden.
15.2.1 Benutzersteuerelemente cachen, die Formulare enthalten
 
Auch ein Benutzersteuerelement kann Formulare enthalten. Dementsprechend können Sie auch in Benutzersteuerelementen in der OutputCache-Direktive das Attribut VaryByParam beziehungsweise alternativ das Attribut VaryByControl verwenden.
Als Beispiel enthält cache_05.aspx die Hauptseite. In diese Seite ist das Benutzersteuerelement cache_05.ascx eingebettet, das die Ampelfrage enthält. Abbildung 15.4 zeigt die Darstellung im Browser.
<!-- cache_05.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ Register Tagprefix="mlohrer"
Tagname="ampel"
src="cache_05.ascx" %>
<html><head>
<title>Ein Webbenutzersteuerelement
mit Formular cachen</title>
</head><body>
<h3>Ein Webbenutzersteuerelement mit
Formular cachen</h3>
<p>Ungecacht ist es jetzt
<% = now.ToLongTimeString() %> Uhr.</p>
<mlohrer:ampel runat="server" id="io" />
</body></html>
<!-- cache_05.ascx -->
<%@ Control %>
<%@ OutputCache Duration="10"
VaryByControl="AmpelListe" %>
<script runat="server">
Sub auswahl (ByVal Sender As Object, _
ByVal E As EventArgs)
If AmpelListe.selectedIndex <> -1 Then
Select Case AmpelListe.SelectedItem.value
Case "1"
ausgabe.InnerText ="Leider falsch!"
Case "2"
ausgabe.InnerText ="Das ist richtig!"
End Select
End If
End Sub
</script>
<h3>Hier beginnt das gecachte Benutzersteuerelement
mit Formular</h3>
<p>Mit Cache ist es jetzt
<% = now.ToLongTimeString() %> Uhr.</p>
<form runat="server" id="myForm">
Wann darf ein Fußgänger die Straße überqueren?<br>
<asp:RadioButtonList id="AmpelListe" runat="server"
RepeatColumns="1"
TextAlign="Right"
OnSelectedIndexChanged="auswahl">
<asp:ListItem text="Bei Rot" value="1" />
<asp:ListItem text="Bei Grün" value="2" />
</asp:RadioButtonList><br>
<asp:Button id="btnOK" runat="server"
Text=" OK " /><br>
<p id="ausgabe" runat="server" />
</form>
 Hier klicken, um das Bild zu Vergrößern
Abbildung 15.4 Auch ein Benutzersteuerelement mit enthaltenem Formular lässt sich in mehreren Versionen cachen.
cache_05.ascx verwendet in seiner OutputCache-Direktive das Attribut VaryByControl="AmpelListe". Alle Varianten des Steuerelements AmpelListe werden dadurch separat gecacht.
|