这里是不是也有个postback的问题呢,是不是因为你在点上传以后,Panel在被动态生成的时候
初始化了,从而找不到file?

解决方案 »

  1.   

    没办法,当你btnSetImgFile_Click后,页面送回到客户端,客户端看到这个TEXTBOX,但是再传过来的时候就找不到这个TEXTBOX了,VIEWSTATE只负责控件元数据的保持,而不能保持创建这个控件,而回访时候控件还是由ASPX声明的控件来构建控件树,由于你的TEXTBOX是在代码里创建,所以在第二次回访后,这个控件将不再创造,
    我看了一下,除了DROPDOWNLIST,CHECKBOXLIST这些集合类控件可以根据VIEWSTATE里的条目数可以恢复LISTITEM以外,还没有其他的父控件能重新恢复他动态创建的子控件,
    所以一般只能采用变通的·方法
    不知道高手有什么建议??期盼啊
      

  2.   

    解决方案:
    把动态生成控件的代码放在pageload里面,同时保留原来的动态生成控件的按纽事件(不过不保留里面的代码),
    代码如下:
    private void Page_Load(object sender, System.EventArgs e)
    {         if(!this.txtImgCount.Text.Equals(""))
                         {
                           int imgCount=int.Parse(txtImgCount.Text);
    for(int i=0;i<imgCount;i++)
    {
    HtmlInputFile file=new HtmlInputFile();
    file.ID="file"+i;
    TextBox imgComment=new TextBox();
    imgComment.ID="fileComment"+i;
    panelImg.Controls.Add(file);
    panelImg.Controls.Add(imgComment);
    }
                             }
    }
    这样的话,每次点击生成按纽,就会重新加载页面,从而执行page_load里面的事件,从而生成了控件并保存了状态,而在执行另一个按纽时,就可以显示出来你原来要显示的东西了.
      

  3.   

    我已经找到了解决方法,就是直接使用Request.From["imgComment"+i],这样很容易取得
    谢谢上面各位仁兄
    接分吧