I know this is quite an old thread. Although here is a solution for anyone who ever happens across this thread looking for one.
This issue seems to occur due to the the appropriate dependency scripts not being included in the page when the control is not visible on the initial page load.
You can implement a workaround by create a div in a visible area of the page with the style "display:none " applied to it. And within that include a dummy uploader control. When the page initially loads, that control will cause the dependencies to be appropriately included. Then once your actual control becomes visible, it will work as expected.
you can do this programmatically based on the visibility of the control, or it's parent, for a slightly cleaner result.