-
Mit der Substitutionssteuerung können Sie Bereiche auf einer Webseite erstellen, die dynamisch aktualisiert und anschließend in zwischengespeicherte Seiten integriert werden können.
1. Planen
Verwenden Sie die Substitutionssteuerung, um die Teile der Webseite anzugeben, in denen Sie die Ausgabe dynamischer Inhalte zwischenspeichern möchten. Für Seiten, auf denen der Großteil des Inhalts zwischengespeichert wird, bietet die Substitutionssteuerung eine vereinfachte Lösung für die teilweise Zwischenspeicherung von Seiten. Sie können die Ausgabe einer gesamten Seite zwischenspeichern und dann mithilfe der Substitutionssteuerung die Teile der Seite angeben, die nicht zwischengespeichert werden. Der Cache-Bereich wird nur einmal ausgeführt und aus dem Cache gelesen, bis der Cache-Eintrag abläuft oder gelöscht wird. Dynamische Regionen werden jedes Mal ausgeführt, wenn die Seite angefordert wird. Dieses Caching-Modell vereinfacht die Codierung für Webseiten, deren Inhalt größtenteils statisch ist, da Sie diesen statischen Inhalt nicht in einem Webbenutzersteuerelement kapseln müssen, um ihn im Cache abzulegen. Dieses Caching-Modell ist beispielsweise nützlich für Webseiten, die statische Inhalte (z. B. Nachrichten) und ein AdRotator-Steuerelement enthalten, das Werbung anzeigt. Nachrichtenmeldungen ändern sich nicht oft, sodass sie zwischengespeichert werden können. Möglicherweise möchten Sie jedes Mal, wenn ein Benutzer die Seite anfordert, eine neue Anzeige schalten. Das AdRotator-Steuerelement unterstützt direkt die Post-Cache-Ersetzung, wodurch bei jedem Postback der Webseite eine neue Anzeige gerendert wird, unabhängig davon, ob die Webseite zwischengespeichert ist.
2. Hintergrund
Wenn Sie eine ASP.NET-Webseite zwischenspeichern, werden standardmäßig alle Ausgaben der Seite zwischengespeichert. Bei der ersten Anfrage wird die Seite ausgeführt und ihre Ausgabe wird zwischengespeichert. Bei nachfolgenden Anfragen erfolgt dies durch Caching und der Code auf dieser Seite wird nicht ausgeführt.
In manchen Fällen möchten Sie möglicherweise nicht nur eine ASP.NET-Webseite zwischenspeichern, sondern auch ausgewählte Teile der Seite jedes Mal aktualisieren, wenn die Seite angefordert wird. Beispielsweise möchten Sie möglicherweise einen großen Teil einer Seite zwischenspeichern, müssen jedoch sehr zeitkritische Informationen auf der Seite dynamisch aktualisieren.
Mit der Substitutionssteuerung können Sie dynamische Inhalte in zwischengespeicherte Seiten einfügen. Die Substitutionssteuerung rendert kein Markup. Daher müssen Sie das Steuerelement an eine Methode in der Webseite oder im übergeordneten Benutzersteuerelement binden. Sie müssen statische Methoden erstellen, die Informationen zurückgeben, die in die Webseite eingefügt werden sollen. Von Substitutionssteuerelementen aufgerufene Methoden müssen die folgenden Kriterien erfüllen:
·Muss eine statische Methode sein (gemeinsam in Visual Basic).
·Muss Parameter vom Typ HttpContext akzeptieren.
·Muss einen Wert vom Typ String zurückgeben.
Das Substitutionssteuerelement hat keinen Zugriff auf andere Steuerelemente auf der Webseite, was bedeutet, dass Sie die Werte anderer Steuerelemente nicht überprüfen oder ändern können. Der Code kann jedoch mithilfe der ihm übergebenen Parameter auf den Kontext der aktuellen Seite zugreifen.
Wenn die Seite ausgeführt wird, ruft das Substitution-Steuerelement diese Methode auf und ersetzt dann die Substitution-Steuerelemente auf der Seite durch den Rückgabewert der Methode.
Codebeispiel
Das folgende Beispiel zeigt, wie Sie mithilfe des Substitutionssteuerelements dynamisch aktualisierbare Inhalte auf einer zwischengespeicherten Seite erstellen. Der Code im Load-Ereignis der Seite aktualisiert das Label-Steuerelement mit der aktuellen Zeit. Da die Cache-Dauer der Seite auf 60 Sekunden festgelegt wurde, ändert sich der Text des Label-Steuerelements nicht, selbst wenn die Seite innerhalb eines Zeitraums von 60 Sekunden mehrmals angefordert wird. Das Substitution-Steuerelement auf der Seite ruft die statische Methode GetTime auf, die die aktuelle Zeit als Zeichenfolge zurückgibt. Bei jeder Aktualisierung der Webseite wird der durch das Substitutionssteuerelement dargestellte Wert aktualisiert.
<%@ Page Language="C#" %>
<%@ OutputCache Duration=60 VaryByParam="None" %>
<script runat="server">
void Page_Load()
{
Label1.Text = DateTime.Now.ToString();
}
öffentlicher statischer String GetTime(HttpContext-Kontext)
{
return DateTime.Now.ToString();
}
</script>
<html>
<head runat="server"></head>
<Körper>
<form id="form1" runat="server">
<div>
<p>
<asp:Label runat="server" ID="Label1" />
</p>
<p>
<asp:Substitution runat="server"
ID="Substitution1"
Methodenname="GetTime" />
</p>
<p>
<asp:Button runat="server" ID="Button1" Text="Submit"/>
</p>
</div>
</form>
</body>
</html>
3. Substitutionsklasse
Verwenden Sie das Substitutionssteuerelement, um den Teil der zwischengespeicherten Ausgabe-Webseite anzugeben, den Sie durch das Steuerelement durch dynamischen Inhalt ersetzen möchten. Die Substitutionssteuerung bietet eine vereinfachte Lösung zum Zwischenspeichern von Teilseiten für Seiten, auf denen der größte Teil des Inhalts zwischengespeichert werden soll. Sie können die gesamte Seite im Cache ausgeben und dann mit der Substitutionssteuerung die Teile der Seite angeben, die vom Caching ausgenommen sind. Bereiche, die zwischengespeichert werden müssen, werden nur einmal ausgeführt und dann aus dem Cache gelesen, bis das Cache-Element abläuft oder gelöscht wird. Dynamische Regionen werden jedes Mal ausgeführt, wenn die Seite angefordert wird. Dieses Caching-Modell vereinfacht den Code für Seiten mit hauptsächlich statischem Inhalt, da diese Teile nicht für die Zwischenspeicherung in Webbenutzersteuerelementen gekapselt werden müssen. Dieses Caching-Modell ist beispielsweise nützlich, wenn die Seite statischen Inhalt (z. B. einen Nachrichtenartikel) und ein AdRotator-Steuerelement enthält, das Anzeigen anzeigt. Nachrichtenartikel ändern sich nicht und können daher zwischengespeichert werden. Sie möchten jedoch jedes Mal eine neue Anzeige schalten, wenn ein Nutzer die Seite anfordert. Das AdRotator-Steuerelement unterstützt direkt die Post-Cache-Ersetzung, wodurch eine neue Anzeige gerendert wird, wenn die Seite zurückgesendet wird, unabhängig davon, ob die Seite zwischengespeichert ist.
Hinweis: Das Substitutionssteuerelement kann im Benutzersteuerelement auf der Cache-Seite platziert werden. Sie können jedoch kein Substitutionssteuerelement innerhalb eines Ausgabecache-Benutzersteuerelements platzieren.
Wenn die Substitutionssteuerung ausgeführt wird, wird eine Methode aufgerufen, die eine Zeichenfolge zurückgibt. Die von dieser Methode zurückgegebene Zeichenfolge ist der Inhalt, der an der Stelle des Substitutionssteuerelements auf der Seite angezeigt werden soll. Verwenden Sie die MethodName-Eigenschaft, um den Namen der Rückrufmethode anzugeben, die aufgerufen werden soll, wenn das Substitutionssteuerelement ausgeführt wird. Die angegebene Rückrufmethode muss eine statische Methode der Seite oder des Benutzersteuerelements sein, die das Substitutionssteuerelement enthält. Die Signatur der Rückrufmethode muss mit der Signatur des HttpResponseSubstitutionCallback-Delegaten übereinstimmen, der einen HttpContext-Parameter akzeptiert und eine Zeichenfolge zurückgibt.
Um den Ausgabecache der Seite zu betreiben, können Sie die @OutputCache-Direktive, die HttpCachePolicy-Klasse oder die Cache-Eigenschaft verwenden.
Eine andere Möglichkeit, das Substitution-Steuerelement zu verwenden, besteht darin, den HttpResponseSubstitutionCallback-Delegaten zu verwenden, um das Cache-Ersetzungsverhalten zu implementieren. Darüber hinaus kann das Cache-Ersetzungsverhalten auf Steuerelementen implementiert werden, die die Cache-Ersetzungsfunktion direkt unterstützen, z. B. das AdRotator-Steuerelement.
Beispiel
Das folgende Codebeispiel zeigt, wie man einer Ausgabecache-Webseite deklarativ ein Substitutionssteuerelement hinzufügt. Wenn die Seite geladen wird, wird dem Benutzer das aktuelle Datum und die aktuelle Uhrzeit in einem Tab angezeigt. Dieser Bereich der Seite wird zwischengespeichert und alle 60 Sekunden aktualisiert. Wenn das Substitutionssteuerelement ausgeführt wird, wird die GetCurrentDateTime-Methode aufgerufen. Die von GetCurrentDateTime zurückgegebene Zeichenfolge wird dem Benutzer angezeigt. Dieser Teil der Seite wird nicht bei jeder Aktualisierung der Seite zwischengespeichert und aktualisiert.
<%@ Ausgabecache-Dauer="60" variierenbyparam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="server" language="C#">
void Page_Load(object sender, System.EventArgs e)
{
// Zeigt das aktuelle Datum und die aktuelle Uhrzeit im Etikett an.
// Ausgabe-Caching gilt für diesen Abschnitt der Seite.
CachedDateLabel.Text = DateTime.Now.ToString();
}
// Die Substitutionssteuerung ruft diese Methode zum Abrufen auf
// das aktuelle Datum und die aktuelle Uhrzeit. Dieser Abschnitt der Seite
// ist vom Ausgabe-Caching ausgenommen.
öffentliche statische Zeichenfolge GetCurrentDateTime (HttpContext-Kontext)
{
return DateTime.Now.ToString ();
}
</script>
<html>
<head runat="server">
<title>Beispiel für eine Substitutionsklasse</title>
</head>
<Körper>
<form id="form1" runat="server">
<h3>Beispiel für eine Substitutionsklasse</h3>
<p>Dieser Abschnitt der Seite wird nicht zwischengespeichert:</p>
<asp:substitution id="Substitution1"
methodname="GetCurrentDateTime"
runat="Server">
</asp:substitution>
<br />
<p>Dieser Abschnitt der Seite wird zwischengespeichert:</p>
<asp:label id="CachedDateLabel"
runat="Server">
</asp:label>
<br /><br />
<asp:button id="RefreshButton"
text="Seite aktualisieren"
runat="Server">
</asp:button>
</form>
</body>