2009-08-10 12 views
5

Ich benutze OutputCache in meiner Seite, die ein Benutzersteuerelement hat, aber ich möchte dieses bestimmte Benutzersteuerelement nicht zwischenspeichern, da es sich um eine Benutzeranmeldung handelt (wenn ich auf die Seite zugreife, sehe ich die Seite so, als wäre ich) authentifiziert mit einem anderen Benutzer).Wie Cache ein ASP.NET-Benutzersteuerelement nicht?

Wie kann ich das tun?

Antwort

10

Ich persönlich verwende die VaryByCustom angemeldet geben Attribut und abgemeldet Benutzer verschiedene gecached Seitenaufrufe:

<%@ OutputCache VaryByCustom="IsLoggedIn" Duration="30" VaryByParam="*" %> 

dann in global.asax Sie setzen

public override string GetVaryByCustomString(HttpContext context, 
    string arg) 
{ 
    if (arg == "IsLoggedIn") 
    { 

     if (context.Request.IsAuthenticated) 
     { 
      return "Logged in: " + context.User.Identity.Name; 
     } 
     else 
     { 
      return "Not Logged In"; 
     } 

    } 
    else 
    { 
     return base.GetVaryByCustomString(context, arg); 
    } 

} 

Ich werde nur werfen das da draußen. Wie steht es mit der Substitutionskontrolle?

http://msdn.microsoft.com/en-us/library/ms228212.aspx

Laut MSDN-Website:

Die Substitution Steuerung können Sie Bereiche auf der Seite erstellen die dynamisch aktualisiert werden kann und dann in eine Cache-Seite integriert. ... Das Substitutions-Steuerelement bietet eine vereinfachte Lösung für die partielle Seite Zwischenspeicherung für Seiten, wo die Mehrheit des Inhalts zwischengespeichert wird. Sie können output-cache die gesamte Seite und dann verwenden Substitutions-Steuerelemente, um die Teile der Seite angeben, die von Caching ausgenommen sind.

Ich habe nie persönlich die substituion Kontrolle, aber ich gerade passiert es den anderen Tag zu sehen, und es klang wie es irgendwie aktualisiertem Inhalt in eine ansonsten Cache-Seite ausgegeben injizieren kann.

1

Sie können eine Seite zwischenspeichern, und Sie können ein Benutzersteuerelement zwischenspeichern, aber Sie können eine Seite mit Ausnahme eines Benutzersteuerelements nicht zwischenspeichern. Wenn das Benutzersteuerelement ausgeführt wird, muss die gesamte Seite ausgeführt werden. Sie müssen den Ausgabe-Cache für die Seite die verschiedenen Benutzer erkennen lassen.

Sie können VaryByHeader="Cookie" verwenden, um die Seite für jeden Satz von Cookies zwischenzuspeichern, wenn die Benutzeridentität in einem Cookie gespeichert ist. Sie können VaryByCustom="SomeString" verwenden und eine Prüfung für SomeString implementieren, um Ihre eigene Prüfung auf Benutzeridentität in der GetVaryByCustomString Methode in Global.asax durchzuführen.