All dynamically loaded controls are unloaded from the page whenever a postback occurs. They will thus not remain on the page if you perform a PostBack. This is quite cumbersome if you are using a lot of dynamically loaded controls in a "dynamic way", where controls can be loaded/unloaded in any order depending on what actions the user performs.
After each postback, you have to manually reload the controls to the page and make sure to do so at the right time in the page life cycle and with the correct ID. If you do anything in the incorrect order, they will not work properly. For instance, events will not fire, nested controls will not load etc.
This, still rather managable, issue can however become quite a problem for complex web applications where dynamically loaded controls are essential to keep down byte size and avoid a lot of unnecessary functionality. It may become quite tricky to keep track of which controls to reload, which to unload etc. if the user's actions determine how they are loaded/unloaded.
A very simple and handy solution to this issue is described in this blog:
http://daniel-saidi.blogspot.com/2008/07/aspnet-dynamically-loaded-usercontrol.html
It features a slimmed, downloadable class which, hopefully, will take care of this issue for you. When you attach a control, you can cast it to the class and then access the class properties as you would do with any class instance.
The blog is removed since a while back. I have created a small class that takes care of this issue and will upload it together with the old text asap.