我设计了一个button1激发的生成一个HtmlInputFile t=new HtmlInputFile()的控件,同时定义了t.ID="file";
然后我的另外iayige button2激发的是上传附件并且发送的事件,其中有一条语句是:HttpPostedFile hpfFile=file.PostedFile;就是调用了button1激发生成的控件HtmlInputFile的ID但是在编译好后输入所有邮件信息包括上传附件后点击button2发送时出现了错误。这是怎么回事啊?未将对象引用设置到对象的实例。
行 90:  mymsg.Subject=txtsubject.Text;
行 91:  mymsg.Body=txtbody.Text;
行 92:  HttpPostedFile hpfFile=file.PostedFile;
行 93:  if(hpfFile.FileName!="")
行 94:  {源文件: c:\inetpub\wwwroot\beta1\webform1.aspx.cs    行: 92

解决方案 »

  1.   

    事先说明程序没问题
    我测试了如果是在设计页面上直接拖HtmlInputFile的控件并定义一个ID的话,使用这个ID上传的附件能正常发送出去的
      

  2.   

    把前面我给你的代码修改如下
    private void Add()
    {
    TableRow r = new TableRow();
    TableCell c=new TableCell();
    HtmlInputFile t=new HtmlInputFile();
    t.ID="tbfile"+Table1.Rows.Count;
    c.Controls.Add(t);
    r.Cells.Add(c);
    this.Table1.Rows.Add(r);
    }然后添加一个按钮输出所有选择的上传的文件名
    这么写for(int i=0;i<Table1.Rows.Count;i++)Response.Write(((HtmlInputFile)Table1.FindControl("tbfile"+i)).PostedFile.FileName+"<br>");
      

  3.   

    因为这个HtlmInputFile控件是你动态创建的,在你按button2的时候,页面重新载入,就没有这个控件了
    当然无法找到这个控件
      

  4.   

    谢谢斑竹!再次研究ING,有问题我等下继续在这个帖子里回哦~
      

  5.   

    在添加的时候指定不同的id
    t.ID="tbfile"+Table1.Rows.Count;
    按照我说的进行遍历
    for(int i=0;i<Table1.Rows.Count;i++)Response.Write(((HtmlInputFile)Table1.FindControl("tbfile"+i)).PostedFile.FileName+"<br>");
    如果你要进行多文件上传的话,不需要提交给服务器进行动态的htmlinputfile生成,参考
    http://dotnet.aspx.cc/ShowDetail.aspx?id=58EA3515-36F2-4FD9-AC89-EAF49F59816C
      

  6.   

    你动态定义的时候,就应该定义好控件的ID,如果是多个同样功能的控件的话就是用脚本,用一个隐藏的或者看不见的控件再你点击按钮的时候通过脚本把你控件的id存到隐藏的控件上,再通过后台代码取下来!
      

  7.   

    斑竹
    设置了t.ID="file"+Table1.Rows.Count;以后
    要调用生成的多个控件时候它们的ID是什么呢?难道就是ID="file"+Table1.Rows.Count
      

  8.   

    for(int i=0;i<Table1.Rows.Count;i++)
    {
    HttpPostedFile file=((HtmlInputFile)Table1.FindControl("file"+i)).PostedFile;
    }