FileUpload的Value属性是只读的,[继续添加附件]按钮不能执行提交事件,否则就会出现你提到的问题,想办法用客户端Javascript实现,一次提交客户端生成所有FileUpload的值

解决方案 »

  1.   

    是用Ajax方法,服务器每产生新的行的时候,仅将新的行的html发送到客户端,客户端把这行html插入。
      

  2.   

    不过ajax相对于普通的asp.net,差别太大了。如果你没有写过 RenderControl 代码,也不很熟悉javascript,还是算了。
      

  3.   


    //container_id 是指FILEUPLOAD控件显示的页面TAG
    // 如有这样一段代码
    /*
    <p id="attachs">
    </p>
    附件显示在上面, 那么再有一个BUTTON的onclock="Attachment('attachs')"就OK啦
    */
    代码如下:function Attachment(container_id) {
        var o = document.getElementById(container_id);//得到容器
        var filebutton = '<br><input type="file" size="70%" name="File" class="txt" />';
        o.insertAdjacentHTML("beforeEnd",filebutton);// 写入
    }
      

  4.   

    当点击一个“继续添加附件”的按钮时给一个DataTable动态添加一行,然后绑定GridView,这样GridView就多显示出一个FileUpload来,然后用ViewState记录下DataTable的状态。问题出在当你在一个FileUpload里选择了一个文件,再点击“继续添加附件”,这时所有FileUpload的文本框全部为空了。麻烦大家提示一下我怎么才能保留住已经选择的文件名,或者有什么其它别的办法动态添加FileUpload也行
    ===============================
    你的错误的原因是发送提交给服务器端的,客户端的页面被刷新,楼上的也说了,fileupload是只读,所以状态无法保存,但ajax在这种情况下,几乎没有用武的余地,主要是js操作本地文件的二进制内容受到的限制太多。
    所以解决方案是添加新附件不要提交服务器端,也就是说不要用服务器端的方法去处理新附件二要用js
    最后发送邮件时在服务器端用
    Request.Files 获得所有的附件
    孟子网站上有专门的讲解