Search code examples
asp.netdynamic-controlsweb-controls

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.


Solution

  • 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