Question

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.

Was it helpful?

Solution 2

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

OTHER TIPS

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.

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top