我在一个panel外放了个add按钮,点击add的时候动态添加一个用户控件,我想放一个delete按钮提供删除功能,可是不管放到用户控件里,还是添加到panel里,点击delete的时候panel里的控件就没有了,该怎么办?我在panel里添加delete按钮的时候用了del.Command += new CommandEventHandler(this.onbutton);但是不管用

解决方案 »

  1.   

    这位朋友,你的想法不能实现哦...可以从ASP.NET的页面周期来分析下,你将动态添加的代码写在了Button_Click事件里面,Button_Click事件发生在Load与LoadComplete之间,并且只有在button被点的时候触发了,可以这么想,这些动态空件的ViewState是可以得到保存的,但是问题在于,如果这个时候其他的Button或者任意的服务器回传事件发生了,那么问题就来了,ViewState中有你动态添加的控件的信息,但是因为你的Button_Click事件并没有在本次服务器回传事件中被执行,那么动态的控件也就没有加载到控件树,在Load事件中写动态控件的代码是可行的,因为Load过后,还有一次ViewState的恢复机会,而写在Button_Click中,只要有其他的服务器回传发生,而你的添加code得不到执行,那么你的动态控件肯定丢失能够实现动态并且回刷不丢失的,只有在Load方法里面写了code,或者,你用GridView做做
      

  2.   

    动态添加控件,点击按钮页面会回传,
    事件丢失,可使用viewstate保存相关数据。在page_load里判断控件是否存在,不存在再重新添加
      

  3.   

    各位高人:
    我要做一个添加工作经验的地方,我想动态添加和删除,不能在page_load里写,因为我需要有add按钮来触发,有什么更好的方法来实现吗? 
      

  4.   

    在动态创建的 按钮 添加 js onclick 属性,然后用ajax 来处理  是个很好的方法
    希望对你有用
      

  5.   


    最初我阐述了原理,也就是说,你写在Button里面原理上是不可行的,这位朋友给出了另外一个想法,你可以尝试下这样,也就是说,add button里面,添加了动态控件的同时,你要用一个viewstate保存这个动态控件的信息,比如text,控件类型啊,然后在load事件里面读取这些viewstate,然后就可以在load事件里面创建控件了,这样动态控件的状态是可以被保存的.