4

J'essaye de créer un contrôle basé sur un modèle très simple. Je ne l'ai jamais fait auparavant, mais je sais que beaucoup de mes contrôles que j'ai créés dans le passé en auraient grandement bénéficié si j'avais inclus la capacité du modèle - donc j'apprends maintenant. Le problème que j'ai est que mon modèle est sorti sur la page mais ma valeur de propriété n'est pas. Tout ce que j'ai, c'est le texte statique que j'inclus dans mon template.Création d'un contrôle basé sur un modèle simple. J'ai des problèmes

Je dois faire quelque chose correctement car le contrôle ne cause aucune erreur, donc il sait que ma propriété publique existe. (Par exemple, si j'essaie d'utiliser Container.ThisDoesntExist, une exception est générée).

J'apprécierais de l'aide à ce sujet. Je peux être juste être un muppet complet et manquer quelque chose. Les didacticiels en ligne sur les contrôles de serveur basés sur des modèles simples semblent rares et, si vous en connaissez un, j'aimerais en savoir plus.

Une version réduite de mon code est ci-dessous.

Merci beaucoup, James

Voici mon code pour le contrôle:

[ParseChildren(true)] 
public class TemplatedControl : Control, INamingContainer 
{ 
    private TemplatedControlContainer theContainer; 

    [TemplateContainer(typeof(TemplatedControlContainer)), PersistenceMode(PersistenceMode.InnerProperty)] 
    public ITemplate ItemTemplate { get; set; } 

    protected override void CreateChildControls() 
    { 
     Controls.Clear(); 

     theContainer = new TemplatedControlContainer("Hello World"); 

     this.ItemTemplate.InstantiateIn(theContainer); 

     Controls.Add(theContainer); 
    } 
} 

Voici mon code pour le conteneur:

[ToolboxItem(false)] 
public class TemplatedControlContainer : Control, INamingContainer 
{ 
    private string myString; 

    public string MyString 
    { 
     get 
     { 
      return myString; 
     } 
    } 

    internal TemplatedControlContainer(string mystr) 
    { 
     this.myString = mystr; 
    } 
} 

Voici ma marque haut:

<my:TemplatedControl runat="server"> 
    <ItemTemplate> 
     <div style="background-color: Black; color: White;"> 
      Text Here: <%# Container.MyString %> 
     </div> 
    </ItemTemplate> 
</my:TemplatedControl> 

Répondre

1

vous devez appeler la méthode DataBind sur votre contrôle.

une possibilité consiste à ajouter appel DataBind dans CreateChildControls() Méthode:

override CreateChildControls void() { Controls.Clear protégé();

theContainer = new TemplatedControlContainer("Hello World"); 

    this.ItemTemplate.InstantiateIn(theContainer); 

    Controls.Add(theContainer); 

    this.DataBind(); 

} 
+0

Vous êtes un sauveur. Excellent. Merci beaucoup - je savais que ça allait être simple! L'apprentissage continue ... Cheers, James – James

+0

heureux de vous aider! :) –

Questions connexes