Вы должны воссоздавать динамические элементы управления при каждой обратной передаче. Лучшее место для этого - метод CreateChildControls
.
Чтобы динамически добавить элемент управления после нажатия кнопки, установите в обработчике щелчка какой-либо флаг (постоянный флаг - поэтому он должен быть в viewstate или в sessionstate) - он должен указывать, что при создании следующей страницы ваш элемент управления должен быть добавлен к нему. После этого вы должны установить ChildControlsCreated = false;
После этого CreateChildControls выполняются снова, и ваш элемент управления создается правильно и является постоянным (до тех пор, пока вы не очистите флаг).
Так должно быть сделано так:
protected override void CreateChildControls()
{
base.CreateChildControls();
if (ViewState["AddControl"] == true)
{
Controls.Add(new MyControl() {Id = "someId" });
}
}
И BTN Handler
private void OnShowControlClick(object sender, EventArgs e)
{
ViewState["AddControl"] = true;
ChildControlsCreated = false;
}