As per the title, I have created a custom control.
On a certain button click event, this control is instantiated, then added to the page.
It is a dynamic con
As with all HTML pages, the control must be recreated on each page request. ASP.NET handles a lot of this 'under the hood' with mechanisms such as ViewState and Session.
If your control is not (or can't be) tracked by ViewState, then you need to handle this yourself.
I don't know how complex your control is, but as a starting point you may wish to read up on handling the CreateChildControls event here (MSDN)
Usually for dynamic controls, they will have to be added on every postback and also the events need to be wired up every time.
You should recreate dynamic controls on every postback. The best place to do that is method CreateChildControls
.
To add dynamically control after button click set in click handler some flag (persistent flag - so it should be in viewstate or in sessionstate) - it should indicate that on next page creation your control should be added to it. After this you should set ChildControlsCreated = false;
After this CreateChildControls are executed again and your control is created correctly and is persistent (till you not clear flag).
So it should be done in this way:
protected override void CreateChildControls()
{
base.CreateChildControls();
if (ViewState["AddControl"] == true)
{
Controls.Add(new MyControl() {Id = "someId" });
}
}
And btn handler
private void OnShowControlClick(object sender, EventArgs e)
{
ViewState["AddControl"] = true;
ChildControlsCreated = false;
}
I believe all you need to do is recreate it with the same ID during pre init and the asp.net engine will populate it from the view state.
This is off the top of my head, so I might have the details off a bit.