2010-11-17 11 views
1

Je construis un contrôle web basé sur un modèle pour une application web asp .net. La plupart fonctionnent bien, mais un problème auquel je suis confronté est que tous les contrôles à l'intérieur de mon modèle sont NULL à l'exécution.Les WebControls personnalisés basés sur des modèles - Les Contons internes sont toujours NULL

Par exemple, si mon contrôle est marqué comme ceci:

<fscc:CollapsiblePanel runat="server" ID="cpExample1" ImageControlId="image1" CssClass="curved"> 
    <Header> 
     this is my header 
     <asp:Image ImageUrl="imageurl" runat="server" ID="image1" /> 
    </Header> 
    <Body> 
     this is the body 
    </Body> 
</fscc:CollapsiblePanel> 

Et mon chargement de la page est comme ceci:

protected void Page_Load(object sender, EventArgs e) 
{ 
    image1.ImageUrl = Paths.Images.expand_jpg; 
} 

Il compiler et exécuter, mais image1 est toujours nulle.

J'ai ajouté ces attributs à la classe:

[ParseChildren(true), PersistChildren(false)] 
public class MyControl : WebControl 

et à la propriété de modèle que j'ai ajouté ces:

[Browsable(false), 
PersistenceMode(PersistenceMode.InnerProperty), 
TemplateInstance(TemplateInstance.Single)] 
public virtual ITemplate Header { get; set; } 

Pour autant que je peux dire cela suffit pour le contrôle de image1 être disponible. De plus, l'outil semble reconnaître le contrôle et place l'image1 dans le fichier .designer.cs, mais il est toujours nul. Qu'est-ce que je rate?

+0

Ive a obtenu exactement le même problème. Des idées? – Remotec

Répondre

2

Utilisation [ParseChildren (ChildrenAsProperties = false)] sur le contrôle basé sur un modèle travaillé pour moi comme décrit dans:

Possible to have a inner control on a custom server control?

+0

Merci. Juste pour noter, '[ParseChildren (false)]' devrait aller sur la classe de contrôle personnalisé de niveau supérieur. –