有关ajax的问题(在updatePanel中动态添加控件的问题)
<form id= "form1 " runat= "server ">
<script runat= "server ">
protected void Button1_Click(object sender, EventArgs e)
{
this.Button2.Text = "我被改变了 ";
Button btn = new Button();
btn.Text = "新的按钮 ";
btn.ID = "acb ";
this.UpdatePanel2.ContentTemplateContainer.Controls.Add(btn);
}
</script>
<div>
<asp:ScriptManager ID= "ScriptManager1 " runat= "server ">
</asp:ScriptManager>
<asp:UpdatePanel ID= "UpdatePanel1 " runat= "server ">
<ContentTemplate>
<asp:Button ID= "Button1 " runat= "server " OnClick= "Button1_Click " Text= "btn1 " />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID= "UpdatePanel2 " runat= "server ">
<ContentTemplate>
<asp:Button ID= "Button2 " runat= "server " Text= "btn2 " />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
为什么 我点了一百次Button1,都只出来一个---- "新的按钮 ";
为什么为什么??????????????????
------解决方案--------------------问题不在ID上
楼主要学习下生存期的问题。
动态添加的控件 页面生成结束就丢失了
需要你自己保存并维护控件状态
(动态生成的控件依然可以有自己的VIEWSTATE)
一般来说动态加载的功能模块都有一个自己的SETUP或者START方法,进行初试设置,或者把上次自己的状态加回来。
举例说明在页面的 OnInit中 根据自己存在SESSION中的一个变量标记把需要的控件生成。并调用他的启动函数把数据给它,保存它的一些关键数据 为了下次生成。 如果在POSTBACK的时候用户要加东西, 那就再生成一个东西 ADD进该去的容器。
简单来说 每次回传都要把前边已经存在 并没有删掉的东西加载一遍。
其实上边说加载过程在OnInit 不是必须, 只是有些东西可能需要在这一步执行,在PAGELOAD也可以,只要保证不出特殊问题。 (比如WEBPART应用在页上,这时候位置可能是变动的,在PAGELOAD时候加 就会有问题。)