2009-06-22 13 views
1

J'essaie de créer un contrôle serveur personnalisé (WebControl) avec une zone de texte.ASP.NET WebControl & Page - Ajouter dynamiquement des contrôles (comme TextBox)

Je ajoute la zone de texte asp.net au contrôle personnalisé dans le remplacement de CreateChildControls. Dans le remplacement OnInit, j'ajoute un gestionnaire d'événements à TextBox.TextChanged.

Tout fonctionne, sauf que TextChanged ne se déclenche jamais. J'ai regardé viewstate et il semble que ma zone de texte n'enregistre jamais sa propriété Text dans viewstate. J'ai essayé de placer le texte dans divers endroits, y compris le constructeur, mais rien ne fonctionne.

Comment est-ce que je peux ajouter TextBox dynamiquement ajouté à WebControl pour enregistrer son texte dans viewstate et obtenir l'événement TextChanged à feu?

J'apprécierais énormément un exemple de code WebControl derrière lequel TextBox est ajouté dynamiquement et l'événement TextChanged est déclenché.

+0

Pouvons-nous voir votre code? – womp

Répondre

1

l'a corrigé. Le contrôle dynamique doit être créé et ajouté dans l'événement Init. Il doit être assigné à un ID sans symboles spéciaux ASP.NET ('$' ou ':' à l'intérieur de l'ID personnalisé cassera les choses). Toutes les propriétés doivent être affectées après l'ajout du contrôle à l'arborescence des contrôles.

est ici un exemple de travail pour la page codebehind:

private readonly TextBox _textBoxTest = new TextBox(); 

protected void Page_Init(object sender, EventArgs e) 
{ 
    this.form1.Controls.Add(_textBoxTest); 
    _textBoxTest.Text = "TestBoxTest"; 
    _textBoxTest.ID = "TestBoxTestId"; 
    _textBoxTest.TextChanged += this._textBoxTest_TextChanged; 
} 

void _textBoxTest_TextChanged(object sender, EventArgs e) 
{ 
    _textBoxTest.Text = "Worked"; 
} 

pour WebControl placer le code d'initialisation dans OnInit passer outre

0

This va vous aider. En bref, vous devez gérer le viewstate pour votre contrôle dynamiquement ajouté par vous-même.

1

Le contrôle créé dynamiquement doit être créé à chaque publication (l'événement pageInit est la meilleure option) pour l'événement à déclencher. Par ailleurs, si vous souhaitez que l'événement TextChanged génère une publication, vous devez également définir la propriété AutoPostback du contrôle sur true.

+0

Il doit être créé, mais le viewstate doit également être restauré. Si vous ne gérez pas manuellement le viewstate, la page le traitera comme un nouveau contrôle et aucun événement ne se déclenchera correctement. – rie819

+1

rie819, désolé, j'ai utilisé des contrôles créés dynamiquement beaucoup de temps et n'a jamais eu besoin de prendre soin de l'état viewstate, a-t-il quelque chose à voir avec la liaison de données? – tekBlues

+0

pouvez-vous fournir un exemple de code de page derrière lequel l'événement TextChange fonctionnerait? – Sumrak