生成代码如下:
Button b1 = new Button();
b1.ID="test_b1";
b1.Text="test";
Panel1.Controls.Add(btnTest);
可以看到生成了。可是点他一下,或者其它按钮点一下,刚生成的组件就会消失。

解决方案 »

  1.   

    你这一段写在哪里,我写在PageLoad中没有问题啊
      

  2.   

    你每次刷新页面都必须重新创建控件(web下是无状态的),如果控件是根据状态变更,可以把状态值保存到ViewState中
      

  3.   

    写在一个按钮里面!因为我想点了那个按钮才出来!
    难道非要在PageLoad中每次加载才行吗?
      

  4.   

    请问 henryfan1,要怎么写?或者说怎么实现。我不是很明白!!谢谢!
      

  5.   

    页面一刷新就没有状态了,所以要在pageLoad中写
      

  6.   

    不会是设一个全局变量,每次PageLoad的时候都判断一下要不要加载吧?这样不是很郁闷?
      

  7.   

    看一下MSDN(最好的使用手册)的ViewState,它的用法大概和Session左不多,不过ViewState只是页面级的,只会在本页有效.注意PageLoad比其它控件的事件先执行,就算点击按钮事件也是PageLoad先执行然后才执行按钮的事件.
      

  8.   

    我遇到过同样的问题,PageLoad里加载,用ViewState保存状态就可以了。
      

  9.   

    应该加一个判断
    if(!Page.IsPostBack)
    {
       //your code
    }
      

  10.   

    to henryfan1:
      拿ViewState当全局变量用吗?每次PageLoad都用ViewState来判断吗?
        void Button1_Click(object sender, EventArgs e)
        {
                ViewState["add_btn1"] = true;
        }
        void Page_Load(object sender, EventArgs e)
        {
             if (Convert.ToBoolean(ViewState["add_btn1"]))
            {
                Button b1 = new Button();
                b1.ID="test_b1";
                b1.Text="test";
                Panel1.Controls.Add(btnTest);
             }
        }
    可是点击Button1不能立刻出现b1。还有,就算在Button1_Click中也加入b1的生成代码,
    b1.Click+=new System.EventHandler(this.SetText);的话不能在本次生成得到响应,要到再次刷新后才能响应。
      

  11.   

    ViewState保存状态《---这个我是不是理解错了?我对这个不懂,呵呵,各位教我,给个代码我看看我就懂了!
      

  12.   

    我做的是每次pageload都进行一次加载,没有什么问题但效率低。
    如果判断是否加载的话对视图维护相对要麻烦一些。
      

  13.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    Button b1 = new Button();
    b1.ID="test_b1";
    b1.Text="test";
    Panel1.Controls.Add(btnTest);
    if(!Page.IsPostBack)
    {
    }
    }
      

  14.   

    奥,想起刚才henryfan1说的了,Button1_Click先进行了一次PageLoad,然后进行ViewState["add_btn1"] = true;,所以要第二次刷新才生成b1,啊,郁闷。
      

  15.   

    好了,我想到了。
        void Button1_Click(object sender, EventArgs e)
        {
            if (!Convert.ToBoolean(ViewState["add_btn1"]))
            {
                ViewState["add_btn1"] = true;
                Button b1 = new Button();
                b1.ID="test_b1";
                b1.Text="test";
                Panel1.Controls.Add(btnTest);
            }
        }
        void Page_Load(object sender, EventArgs e)
        {
             if (Convert.ToBoolean(ViewState["add_btn1"]))
            {
                Button b1 = new Button();
                b1.ID="test_b1";
                b1.Text="test";
                Panel1.Controls.Add(btnTest);
             }
        }
    这样可以,只是感觉有点累赘。不知道各位有什么好办法没?
      

  16.   

    谢谢各位了,有好方法再发给我[email protected],可以开新贴给分!