日期:2014-05-17  浏览次数:20371 次

[急]动态生成 的form 和file 提交到后台 file获取不了.
想写一个 动态图片上传的功能.  动态生成一个form 然后添加 file  .然后提交到后台.
后台的 System.Web.HttpContext.Current.Request.Files 的Count是0 啊 怎么回事.
大家帮忙看一下啊.


function chooseImg(fileid){
    
    var ImgForm = document.createElement('form');
    ImgForm.id ='form'+fileid;
    ImgForm.action = 'PBImgUpdate.aspx?Img='+fileid;
    ImgForm.method = 'POST';
    //ImgForm.style.display='none';
    ImgForm.target="ImgUpdate"+fileid;
    ImgForm.enctype="multipart/form-data";

    var fileImg = document.createElement('input');
    fileImg.id = fileid;
    fileImg.type='file';
   
    var ImgIframe = document.createElement('iframe');
    ImgIframe.name = "ImgUpdate"+fileid;
   
    document.body.appendChild(ImgForm);
    ImgForm.appendChild(fileImg);
    ImgForm.appendChild(ImgIframe);
   
    fileImg.click();

    if(fileImg.value.length>0){
        ImgForm.submit();
    }
}

------解决方案--------------------
js添加的<input type="file">控件,在后台当然拿不到了,不是服务端的控件。

你要在后台方法中添加asp:FileUpload控件,这样是可以做到的,只是在添加时,页面会闪烁。

如果真想做比较酷的多文件上传,可以用swfupload控件:swfupload官网
支持多文件上传,有上传进度条,如果上传图片,还能先预览缩略图。
------解决方案--------------------
楼主,你的file里面有值吗。没选中文件当然是0了。再者,ie不支持在js里面设置enctype属性,所以在ie里面这种操作没效果。换成chrome就可以了。
------解决方案--------------------
看看form有没有这个属性enctype
<form id="form1" runat="server" enctype="multipart/form-data">
------解决方案--------------------
那你换成chrome浏览器试试呢。反正以前我帮别人解决这种问题的时候。原因就是ie内核里的form不能动态设置enctype。而chrome浏览器可以。所以用chrome的时候,服务端能接收到文件
------解决方案--------------------
给你一个我的示例:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MultiFileUpload.aspx.cs"
  Inherits="MultiFileUpload" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>多文件上传测试</title>

  <script type="text/javascript">
    function addFile() {
      var div = document.createElement("div");
      var f = document.createElement("input");
      f.setAttribute("type", "file")
      f.setAttribute("name", "File")
      f.setAttribute("size", "50")
      div.appendChild(f)
      var d = document.createElement("input");
      d.setAttribute("type", "button")