Faced the same problem ... seems when you toggle visibility of controls within an UpdatePanel, the server-side generated markup doesn't include said controls.
Scoured the net for a solution to no avail 
Managed a work-around :
Contain the controls of which you wish to toggle the visible state within a <div id='xxxxxxx'> tag.
Markup:
<asp:UpdatePanel ID="myUpdatePanel" runat="server" >
<ContentTemplate>
<div id='myDiv'>
<asp:TextBox ID="myTextBox" runat="server"/>
</div>
</ContentTemplate>
</asp:UpdatePanel>
Code-Behind :
void Button_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "myScriptID", GetToggleVisibiltyScript(), true);
}
private string GetToggleVisibiltyScript()
{
StringBuilder script = new StringBuilder();
script.Append(String.Format("document.getElementById('myDiv').innerHTML = '<input type=\"text\" id=\"{0}\" />';", this.myTextBox.ClientID));
return script.ToString();
}