-
Vous pouvez utiliser le contrôle Substitution pour créer des zones sur une page Web qui peuvent être mises à jour dynamiquement et ensuite intégrées dans les pages mises en cache.
1. Planifier
Utilisez le contrôle Substitution pour spécifier les parties de la page Web dans lesquelles vous souhaitez mettre en cache la sortie du contenu dynamique. Pour les pages dont la majeure partie du contenu est mise en cache, le contrôle Substitution fournit une solution simplifiée pour la mise en cache partielle des pages. Vous pouvez mettre en cache la sortie d'une page entière, puis utiliser le contrôle Substitution pour spécifier les parties de la page qui ne sont pas mises en cache. La zone de cache n'est exécutée qu'une seule fois et sera lue à partir du cache jusqu'à ce que l'entrée du cache expire ou soit effacée. Les régions dynamiques sont exécutées à chaque fois que la page est demandée. Ce modèle de mise en cache simplifie le codage des pages Web dont le contenu est principalement statique, car vous n'avez pas besoin d'encapsuler ce contenu statique dans un contrôle utilisateur Web pour le mettre dans le cache. Par exemple, ce modèle de mise en cache est utile pour les pages Web contenant du contenu statique (tel que des actualités) et un contrôle AdRotator qui affiche des publicités. Les actualités ne changent pas souvent, ce qui signifie qu'elles peuvent être mises en cache. Vous souhaiterez peut-être afficher une nouvelle annonce chaque fois qu'un utilisateur demande la page. Le contrôle AdRotator prend directement en charge le remplacement après mise en cache, qui affiche une nouvelle annonce à chaque publication de la page Web, que la page Web soit ou non mise en cache.
2. Contexte
Lorsque vous mettez en cache une page Web ASP.NET, par défaut, toutes les sorties de la page sont mises en cache. À la première requête, la page s'exécutera et sa sortie sera mise en cache. Pour les demandes ultérieures, cela se fera via la mise en cache et le code de cette page ne s'exécutera pas.
Dans certains cas, vous souhaiterez peut-être non seulement mettre en cache une page Web ASP.NET, mais également mettre à jour des parties sélectionnées de la page à chaque fois que la page est demandée. Par exemple, vous souhaiterez peut-être mettre en cache une grande partie d’une page, mais devrez mettre à jour dynamiquement des informations très sensibles au facteur temps sur la page.
Vous pouvez utiliser le contrôle Substitution pour insérer du contenu dynamique dans les pages mises en cache. Le contrôle Substitution ne restitue aucun balisage. Par conséquent, vous devez lier le contrôle à une méthode dans la page Web ou au contrôle utilisateur parent. Vous devez créer des méthodes statiques qui renvoient des informations à insérer dans la page Web. Les méthodes appelées par les contrôles Substitution doivent répondre aux critères suivants :
·Doit être une méthode statique (partagée dans Visual Basic).
·Doit accepter les paramètres de type HttpContext.
·Doit renvoyer une valeur de type String.
Le contrôle Substitution n'a pas accès aux autres contrôles de la page Web, ce qui signifie que vous ne pouvez pas inspecter ou modifier les valeurs des autres contrôles. Cependant, le code peut accéder au contexte de la page en cours grâce aux paramètres qui lui sont passés.
Lorsque la page s'exécute, le contrôle Substitution appelle cette méthode, puis remplace les contrôles Substitution sur la page par la valeur de retour de la méthode.
exemple de code
L'exemple suivant montre comment utiliser le contrôle Substitution pour créer du contenu pouvant être mis à jour dynamiquement sur une page mise en cache. Le code dans l'événement Load de la page met à jour le contrôle Label avec l'heure actuelle. Étant donné que la durée du cache de la page a été définie sur 60 secondes, le texte du contrôle Label ne change pas, même si la page est demandée plusieurs fois au cours d'une période de 60 secondes. Le contrôle Substitution sur la page appelle la méthode statique GetTime, qui renvoie l'heure actuelle sous forme de chaîne. Chaque fois que la page Web est actualisée, la valeur représentée par le contrôle Substitution est mise à jour.
<%@ Langage de la page="C#" %>
<%@ OutputCache Duration=60 VaryByParam="Aucun" %>
<script runat="serveur">
vide Page_Load()
{
Label1.Text = DateTime.Now.ToString();
}
chaîne statique publique GetTime (contexte HttpContext)
{
return DateTime.Now.ToString();
}
</script>
<html>
<head runat="serveur"></head>
<corps>
<form id="form1" runat="serveur">
<div>
<p>
<asp:Label runat="server" ID="Label1" />
</p>
<p>
<asp:Substitution runat="serveur"
ID="Substitution1"
Nom de la méthode="GetTime" />
</p>
<p>
<asp:Button runat="server" ID="Button1" Text="Soumettre"/>
</p>
</div>
</form>
</corps>
</html>
3. Classe de remplacement
Utilisez le contrôle Substitution pour spécifier la partie de la page Web mise en cache de sortie dont vous souhaitez remplacer le contrôle par du contenu dynamique. Le contrôle Substitution fournit une solution simplifiée pour la mise en cache de pages partielles pour les pages dont la majeure partie du contenu doit être mise en cache. Vous pouvez mettre en cache la page entière, puis utiliser le contrôle Substitution pour spécifier les parties de la page qui sont exemptées de la mise en cache. Les zones qui doivent être mises en cache ne sont exécutées qu'une seule fois, puis lues dans le cache jusqu'à ce que l'élément du cache expire ou soit effacé. Les régions dynamiques sont exécutées à chaque fois que la page est demandée. Ce modèle de mise en cache simplifie le code pour les pages dont le contenu est principalement statique, car ces parties n'ont pas besoin d'être encapsulées pour la mise en cache dans les contrôles utilisateur Web. Par exemple, ce modèle de mise en cache est utile si la page contient du contenu statique (tel qu'un article d'actualité) et un contrôle AdRotator qui affiche des publicités. Les articles d'actualité ne changent pas, ce qui signifie qu'ils peuvent être mis en cache. Cependant, vous souhaitez afficher une nouvelle annonce chaque fois qu'un utilisateur demande la page. Le contrôle AdRotator prend directement en charge le remplacement après mise en cache, qui affiche une nouvelle annonce lorsque la page est publiée, que la page soit ou non mise en cache.
Remarque : Le contrôle Substitution peut être placé dans le contrôle utilisateur contenu dans la page cache. Toutefois, vous ne pouvez pas placer un contrôle de substitution dans un contrôle utilisateur du cache de sortie.
Lorsque le contrôle Substitution est exécuté, une méthode qui renvoie une chaîne est appelée. La chaîne renvoyée par cette méthode est le contenu à afficher à l'emplacement du contrôle Substitution sur la page. Utilisez la propriété MethodName pour spécifier le nom de la méthode de rappel à appeler lors de l'exécution du contrôle Substitution. La méthode de rappel spécifiée doit être une méthode statique de la page ou du contrôle utilisateur qui contient le contrôle Substitution. La signature de la méthode de rappel doit correspondre à la signature du délégué HttpResponseSubstitutionCallback qui accepte un paramètre HttpContext et renvoie une chaîne.
Pour exploiter le cache de sortie de la page, vous pouvez utiliser la directive @OutputCache, la classe HttpCachePolicy ou la propriété Cache.
Une autre façon d’utiliser le contrôle Substitution consiste à utiliser le délégué HttpResponseSubstitutionCallback pour implémenter le comportement de remplacement du cache. De plus, le comportement de remplacement du cache peut être implémenté sur des contrôles qui prennent directement en charge la fonctionnalité de remplacement du cache, tels que le contrôle AdRotator.
Exemple
L'exemple de code suivant montre comment ajouter de manière déclarative un contrôle de substitution à une page Web du cache de sortie. Lorsque la page se charge, l'utilisateur voit la date et l'heure actuelles dans un onglet. Cette zone de la page est mise en cache et mise à jour toutes les 60 secondes. Lorsque le contrôle Substitution s'exécute, la méthode GetCurrentDateTime est appelée. La chaîne renvoyée par GetCurrentDateTime sera affichée à l'utilisateur. Cette partie de la page n'est pas mise en cache et mise à jour à chaque actualisation de la page.
<%@outputcache duration="60"varibyparam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="serveur" langage="C#">
void Page_Load (expéditeur de l'objet, System.EventArgs e)
{
// Affiche la date et l'heure actuelles dans l'étiquette.
// La mise en cache de sortie s'applique à cette section de la page.
CachedDateLabel.Text = DateTime.Now.ToString();
}
// Le contrôle Substitution appelle cette méthode pour récupérer
// la date et l'heure actuelles. Cette section de la page.
// est exempté de la mise en cache de sortie.
chaîne statique publique GetCurrentDateTime (contexte HttpContext)
{
retourner DateTime.Now.ToString ();
}
</script>
<html>
<head runat="serveur">
<title>Exemple de classe de substitution</title>
</tête>
<corps>
<form id="form1" runat="serveur">
<h3>Exemple de classe de substitution</h3>
<p>Cette section de la page n'est pas mise en cache :</p>
<asp:identifiant de substitution="Substitution1"
nomdeméthode="GetCurrentDateTime"
runat="Serveur">
</asp:substitution>
<br />
<p>Cette section de la page est mise en cache :</p>
<asp:label id="CachedDateLabel"
runat="Serveur">
</asp:étiquette>
<br /><br />
<asp:button id="RefreshButton"
text="Actualiser la page"
runat="Serveur">
</asp:bouton>
</form>
</corps>