2012-04-03 12 views
1

Ich habe eine Seite mit einer Liste von vielen Produkten aus der Datenbank. Und auf dieser Seite habe ich einige Informationen des angemeldeten Benutzers. Diese Information befindet sich in einem Benutzersteuerelement. (Es ist nicht möglich, die Liste mit Produkten in einem Usercontrol :) zu setzen)Kein OutputCache für UserControl

Also habe ich dies ganz oben auf meiner Seite die Seite

<%@ OutputCache Duration="200" 
    Location="Any" 
    VaryByParam="none" 
%> 

Aber weil diese Caches die ganze Seite cachen , das UserControl mit den Benutzerinformationen wird ebenfalls zwischengespeichert. Ist es möglich, das Zwischenspeichern nur für das UserControl zu deaktivieren, nicht jedoch für den Rest der Seite?

Ich habe Substitutionsblöcke betrachtet. Aber es scheint, dass dies nur mit Text funktioniert?

Danke,

Vincent

Antwort

4

Von MSDN:

Damit Sie eine Seite in den Cache aber einige Inhalte dynamisch zu ersetzen, Sie ASP.NET post-Cache Substitution verwenden können. Mit der Substitution nach Cache wird die gesamte Seite im Cache mit bestimmten Teilen ausgegeben, die als vom Caching ausgenommen gekennzeichnet sind. Im Beispiel der Werbebanner ermöglicht Ihnen die AdRotator-Steuerung , die Vorteile der -Substitution nach dem Cachespeicher zu nutzen, so dass für jeden Nutzer dynamisch Anzeigen erstellt werden und für jede Seite die Seite aktualisiert wird.

Es gibt drei Möglichkeiten, post-Cache Substitution zu implementieren:

  • Deklaratives, mit der Substitution Kontrolle.

  • Programmgesteuert mit der Ersetzungssteuerungs-API.

  • Implizit mit dem AdRotator-Steuerelement.

Ich denke, die beste Option Steuerung mit der Substitution würde. Dazu fügen Sie eine Substitution Kontrolle auf Ihre Seite, und legen Sie seine MethodName Eigenschaft:

<asp:Substitution runat="server" MethodName="GetUserInfo"></asp:substitution> 

Jetzt GetUserInfo Methode zu Ihrer Seite hinzufügen. Die Substitution Steuer ruft diese Methode den Benutzer Informationen abzurufen:

public static string GetUserInfo(HttpContext context) 
{ 
    // return rendered user control 
} 

Das Ding links ist Ihr Benutzersteuerung in einen String zu machen.Hierzu können Sie eine Technik verwenden, die im Artikel Tip/Trick: Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios von Scott Guthrie vorgeschlagen wurde. In diesem Fall, um den Benutzer zu steuern, verwenden Sie einfach etwas wie:

return ViewManager.RenderView("UserInfo.ascx"); 
+0

Perfekt! Vielen Dank :) – Vinzcent

0

Platz der Liste Produkt in einem Session. Jetzt greifen Sie überall von der Anwendung darauf zu.

YourColectionClass variable = Session["Sessionvariable"] == null ? 
      ClassObject.DatabaseFunction(Params) : 
      (YourColectionClass)Session["Sessionvariable"]; 

Jetzt Cache es auf der Grundlage von VaryByparam. VaryByParam kann UserID haben.