The previous post was rather old, but the issue with dynamically loaded user controls still remain.
All dynamically loaded controls are unloaded from the page when a postback occurs. They will thus not remain on the page if you press a button or perform a PostBack in any way. This is quite annoying, since you manually have to reload any dynamically loaded controls to the page after the postback. You must also make sure to reload them at the right time and with the correct ID...otherwise they will not work properly. For instance, events may not fire, nested controls may crasch etc.
This can become quite a problem for large, complex web applications where dynamically loaded controls are essential to keep down byte size and avoid a lot of unnecessary functionality.
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.