2010-11-24 14 views
2

J'ai un contrôle déclaré avec l'attribut PartialCaching, comme ceci:Comment utiliser la mise en cache partielle avec des contrôles créés dynamiquement?

[PartialCaching(60 * 60 * 12)] 
public class MyControl : Control { 
    // control contents ... 
} 

mais je créer dans le code, en utilisant nouveau mot-clé. Le problème est que si le contrôle est dans le cache, je ne dois pas créer le contrôle la prochaine fois, mais j'ai besoin d'ajouter le contrôle à la hiérarchie de la page, sinon rien ne sera rendu. Ce dont j'ai besoin en pseudo-code est quelque chose comme ceci:

if (myControlIsCached) { 
    var ctl = ???; // something that represents the cached control 
        // e.g. could be: new LiteralControl(myControlCachedData) 
    this.Controls.Add(ctl); 
} 
else { 
    var ctl = new MyControl(); 
    // setup control ... 
    this.Controls.Add(ctl); 
} 

Quelle est la bonne façon de le faire?

Merci à tous.

Répondre

1

Je crois que vous cherchez à faire quelque chose comme ceci:

Control possiblyCachedControl = LoadControl("path to control"); 
MyControlType control = null; 
if (possiblyCachedControl is MyControlType) 
{ 
    //control wasn't cached 
    control = possiblyCachedControl as MyControlType; 
} 
else if (possiblyCachedControl is PartialCachingControl && ((PartialCachingControl)possiblyCachedControl).CachedControl != null) 
{ 
    //control was cached 
    control = (MyControlType)((PartialCachingControl)possiblyCachedControl).CachedControl; 
} 
if (control != null) 
{ 
    //use the control 
} 
+0

C'est, mais avec peu de différences de ce que je avais besoin. Dans mon cas, j'ai besoin de charger le 'MyControl' dans un autre contrôle. La méthode LoadControl est un membre de la page, donc je l'ai fait comme ceci: this.Page.LoadControl (typeof (MyControl), null) ... maintenant mon problème est résolu, merci! –

+0

J'ai utilisé le même code, mon contrôle ne se charge toujours pas et la page est vide, quel pourrait être le problème? –