It seems that the AjaxUpdate event must be delegated before the Page's OnLoad or else any controls programmatically added to the UpdatePanel won't be shown. I have a test page setup, and moving the AjaxUpdate delegation to OnInit solves the problem. This is kind of an inconvenience... is there a reason it's this way? Thanks!