页面上有一个panel控件,还有一个button(id是ButtonAdd),我想实现的功能时点击一下这个button,就自动生成一个fileupload控件(就是那个上传控件)页面放了一个隐藏的label,这个label用来存储点击button的次数,我就写了这段代码:(如下)
protected void ButtonAdd_Click(object sender, EventArgs e)
        {
          
                FileUpload fileupload;
                fileupload = new FileUpload();
                fileupload.ID = fileupload + Convert.ToString(Convert.ToInt32(Label1.Text) + 1);
                Panel1.Controls.Add(fileupload);
                Label1.Text = Convert.ToString(Convert.ToInt32(Label1.Text) + 1);
        }运行出来的问题是:不论我点击多少次,页面上只生成了一个fileupload.
原因我觉得可能有两个
1:实例化的问题,因为每个实例化对象都是fileupload;
2:回传服务器,导致页面刷新,就是刚才生成的fileupload没了,又产生了一个新的fileupload.
我不知道是不是这两个原因,我现在也不是很清楚正确的该怎么写,还望高手赐教!非常感谢大家!

解决方案 »

  1.   

    多文件上传 每次点增加按钮都回发不是好的处理办法 
    应在客户端处理 这样用户使用起来也好一些
    可参考 孟子的http://dotnet.aspx.cc/ShowDetail.aspx?id=58EA3515-36F2-4FD9-AC89-EAF49F59816C
      

  2.   

    1楼正解。你再搞个label2来显示fileupload的id(Name)试调下看看。
      

  3.   

    是不是FileUpload每次声明的变量名相同所致
      

  4.   

    原因是你猜测的第二原因,解决方法button的事件里是放一个int变量到viewstate里,然后在Page_Load里用循环去加实际上这么处理并不太好,还是应该在客户端用js+dhtml或js+dom处理比较友好些
      

  5.   

    我有一个方法,你可以先将控件放到PANNEL上,将它们的ENABLE设置为FALSE,当你点BUTTON时再将ENABLE改为TRUE
      

  6.   

    是第二个原因导致的。2:回传服务器,导致页面刷新,就是刚才生成的fileupload没了,又产生了一个新的fileupload. 
      

  7.   

    protected void ButtonAdd_Click(object sender, EventArgs e)
            {
              
                    FileUpload fileupload;
                    fileupload = new FileUpload();
                    fileupload.ID = fileupload + Convert.ToString(Convert.ToInt32(Label1.Text) + 1);
                    Panel1.Controls.Add(fileupload);
                    Label1.Text = Convert.ToString(Convert.ToInt32(Label1.Text) + 1);
    ViewState(“cnt”)=        } 
      

  8.   

    protected void ButtonAdd_Click(object sender, EventArgs e)
            {
              
                    FileUpload fileupload;
                    fileupload = new FileUpload();
                    fileupload.ID = fileupload + Convert.ToString(Convert.ToInt32(Label1.Text) + 1);
                    Panel1.Controls.Add(fileupload);
                    Label1.Text = Convert.ToString(Convert.ToInt32(Label1.Text) + 1);                ViewState(“cnt”)= Label1.Text;        } 
    protected void Page_Load(.........)
    {
         for (int i=0; i < Convert.ToInt32(ViewState("cnt"));i++)
         {
                    FileUpload fileupload;
                    fileupload = new FileUpload();
                    fileupload.ID = fileupload + (i + 1).ToString());
                    Panel1.Controls.Add(fileupload);
         }
    }