Question

J'essaie de créer un contrôle serveur personnalisé (WebControl) avec une zone de texte.

J'ajoute asp.net textbox au contrôle personnalisé dans le remplacement de CreateChildControls. Dans OnInit, écrasez le gestionnaire d’événements dans 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 le viewstate. J'ai essayé de définir du texte à différents endroits, y compris le constructeur, mais rien ne fonctionne.

Comment puis-je ajouter dynamiquement TextBox à WebControl pour enregistrer son texte dans l'état de visualisation et obtenir le déclenchement de l'événement TextChanged?

J'apprécierais beaucoup un exemple de code WebControl en retard, avec ajout dynamique de TextBox et activation de l'événement TextChanged.

Était-ce utile?

La solution 2

l'a corrigé. Le contrôle dynamique doit être créé et ajouté dans l'événement Init. On doit lui attribuer un identifiant sans symboles ASP.NET spéciaux ('$' ou ':' dans l'identifiant personnalisé va casser des choses). Toutes les propriétés doivent être attribuées une fois le contrôle ajouté à l’arborescence des contrôles.

voici un exemple de travail pour 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 le code d'initialisation place WebControl dans le remplacement OnInit

Autres conseils

Le contrôle créé de manière dynamique doit être créé à nouveau à chaque publication (l'événement pageInit est la meilleure option) pour que l'événement soit déclenché.

BTW, si vous souhaitez que l'événement TextChanged génère une publication, vous devez également définir la repositionnement automatique du contrôle sur true.

Ceci vous aidera. En bref, vous devez gérer vous-même le viewstate pour votre contrôle ajouté dynamiquement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top