我自己写的一个UserControl
部分代码如下:protected void Page_Load(object sender, EventArgs e)
{
    CreateUI();
}private void CreateUI()
{
    _btn = new Button();
    _btn.Click += new EventHandler(_btn_Click);
}void _btn_Click(object sender, EventArgs e)
{
    // 这里进行了一些内部操作
    // ...

    CreateUI();
}运行以后,该按钮每点两次才会反应一次,这是为什么?

解决方案 »

  1.   

    if(!IsPostBack)
    {
    CreateUI();
    }
      

  2.   

    protected void Page_Load(object sender, EventArgs e)
    {
       if(!IsPostBack)
    {
    CreateUI();
    }
    }
      

  3.   

    我试过加上 if (!IsPostBack),但是加上以后,当按完按钮以后,整个usercontrol就不见了
    也就是没有CreateUI来创建界面,按理说postback以后应该会自动保存之前的状态啊,为什么会不见呢,请高手指教~
      

  4.   

    还有一个问题就是我点按钮postback以后,所有内部的私有变量值就清零了,有没有办法保留下来?
      

  5.   

    封装成属性,保存在viewstate里
      

  6.   

    按你的思路,我用以下的测试代码,测试没问题(临时用PlaceHolder1来装载动态btn)
    public class testPage
    {
        private Button _btn;
        protected void Page_Load(object sender, EventArgs e)
        {
            CreateUI();    }
        private void CreateUI()
        {
            _btn = new Button();
            PlaceHolder1.Controls.Add(_btn);
            _btn.ID = "btn1";
            _btn.Text = "test btn";
            _btn.Click += new EventHandler(_btn_Click);
        }    void _btn_Click(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToLongTimeString());
        }
    }
    ---------------
    内部私有变量回发后的状态保存,根据需要用viewstate、session、cache等保存。
    你的问题如果涉及到----动态添加的控件的某些状态值的保存的话,参见:
    http://blog.joycode.com/saucer/archive/2004/10/20/35927.aspx==== 
    ~~~~ 我的Blog:http://blog.csdn.net/quou2002 
      

  7.   

    还是不行啊,不论用什么方法,除了整个页面刚打开以后的第一次点击以外,以后都是要点两次才有效,我跟踪过,以后的第一次点击根本不会触发Click事件,好奇怪啊另外我的程序必须在 _btn_click() 事件中重新执行 CreateUI 是不是和这个有关?