Sumrak
Sumrak

Reputation: 3748

ASP.NET WebControl & Page - Adding controls (like TextBox) dynamically

I'm trying to create a custom server control (WebControl) with a text box.

I add asp.net textbox to the custom control in CreateChildControls override. In OnInit override I add event handler to TextBox.TextChanged.

Everything works, except that TextChanged never fires. I looked at viewstate and it looks like my textbox never saves its Text property in the viewstate. I've tried to set Text in various places, including constructor, but nothing works.

How can I get TextBox dynamically added to WebControl to save it's Text in viewstate and get TextChanged event to fire?

I would greatly appreciate an example of WebControl code behind with TextBox being added dynamically and TextChanged event being fired.

Upvotes: 1

Views: 3553

Answers (3)

Sumrak
Sumrak

Reputation: 3748

fixed it. dynamic control must be created and added in Init event. It must be assigned an ID without special ASP.NET symbols ('$' or ':' inside custom ID will break things). All properties must be assigned after control is added to the controls tree.

here's a working example for 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";
}

for WebControl place init code in OnInit override

Upvotes: 1

tekBlues
tekBlues

Reputation: 5793

The dynamically created control must be created again in each post back, (the pageInit event is the better option) for the event to be fired.

BTW, if you want the TextChanged event to generate a postback you must also set the AutoPostback of the control to true.

Upvotes: 1

rie819
rie819

Reputation: 1249

This will help you out. In short, you need to handle the viewstate for your Dynamically added control on your own.

Upvotes: 0

Related Questions