[急]动态生成 的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")