2008-09-24 4 views
5

je contrôle utilisateur nommé DateTimeUC qui a deux champs de saisie sur son balisage:Les contrôles ne semblent pas sur le contrôle de l'utilisateur créé dynamiquement

<asp:TextBox ID="dateTextBox" runat="server"></asp:TextBox> 
<asp:TextBox ID="timeTextBox" runat="server"></asp:TextBox> 

Je crée dynamiquement ce contrôle dans un autre contrôle utilisateur:

Controls.Add(GenerateDateTime(parameter)); 
private DateTimeUC GenerateDateTime(SomeParameter parameter) 
{ 
    DateTimeUC uc = new DateTimeUC(); 
    uc.ID = parameter.Name; 
    return uc; 
} 

Mais quand je rends la page, DateTimeUC ne rend rien. Je l'ai vérifié comme ceci:

protected override void Render(HtmlTextWriter writer) 
{ 
    base.Render(writer); 

    StringBuilder builder = new StringBuilder(); 
    StringWriter swriter = new StringWriter(builder); 
    HtmlTextWriter hwriter = new HtmlTextWriter(swriter); 
    base.Render(hwriter); 
    string s = builder.ToString(); 
} 

s est vide et Controls.Count est 0. Qu'est-ce que je fais mal?

Répondre

9

Vous devez utiliser la méthode LoadControl("your_user_control_app_relative_path.ascx") au lieu de "DateTimeUC uc = new DateTimeUC();"

+0

cherché une réponse à toute la journée. Merci! – McMuttons

+0

Comment charger un contrôle utilisateur incorporé dans une DLL? – Zolomon

+0

@Zolomon: Vous avez besoin du fichier * .ascx. Le fichier * .ascx contient le balisage asp.net qui est utilisé pour la classe générée automatiquement. La classe autogenerated hérite de class in assembly (* .dll). – TcKs

0

J'ai moi-même rencontré ce problème il y a quelque temps. Vous devez utiliser la méthode LoadControl(). Découvrez this page à ce sujet.

0

Je pense que vous souhaitez ajouter votre contrôle au formulaire de la page & pas le formulaire lui-même.

votre code:

Controls.Add(GenerateDateTime(parameter)); 

essayer:

Page.Form.Controls.Add(GenerateDateTime(parameter));