2016-12-30 35 views
2

我想将图像和几个表单元素上传到MVC控制器。这里的问题不是模型没有被填充,因为它适用于application/x-www-form-urlencoded,但似乎与multipart/form-data有关。问题的核心是,Request.Form没有被填充...FormData不传回给MVC控制器

转换表到FORMDATA:

function frmValuesAsFormData(submittedForm) { 
    return new FormData(submittedForm); 
} 

AJAX功能(asFormData在为真正的传递在这种情况下和方法是POST和数据类型是JSON):

function executeAJAX(method, url, data, asFormData, silent, callbackFunc, receiveFunc, dataType, targetDiv, appendToExistingContent, uid) { 

    var cType = "application/x-www-form-urlencoded"; 
    var processData = true; 

    if (asFormData) { 
     cType = "multipart/form-data"; 
     processData = false; 
    } 

    $.ajax({ 
     method: method, 
     url: url, 
     data: data, 
     contentType: cType, 
     cache: false, 
     dataType: dataType, 
     processData: processData, 
     success: function (d, t, j) { 
      // Do something with result from controller... 
     } 
    }); 
} 

POST标头(来自萤火虫)

接受应用/ JSON,叔ext/javascript,/; Q = 0.01 接受编码的gzip,放气接受语言烯GB,EN; Q = 0.5 内容长度936的内容类型的multipart/form-data的曲奇 ASP.NET_SessionId = mzppxvimv03qb0smtyrgdw3z主机本地主机:64727 Referer的http://localhost:64727/Home/Contact用户-agent的Mozilla/5.0 (Windows NT的10.0; Win64的; 64; RV:50.0)壁虎/ 20100101火狐/ 50.0 X-请求-使用XMLHttpRequest

POST实施例(来自萤火虫):

----------------------------- 26439188689323内容处理:fo RM-数据; NAME = “的图像文件中”;文件名= “WWKDK33.jpg” 的Content-Type: 图像/ JPEG

PNG IHDR “” xÕj7IDATxÚíÚK ÐÞÿÒzB3〜TH,OB |nHàøÈ乙“B”D!B!B“D”D!B $ !B“Dcdtå” Õl B“D!B ô”“”D!B URi,ÖÕ“D!BQ/Q:[[* E”D!B'a¼ÙôWÿéf“D!B¢] HæL〜eD! B“DöÍ_ÉòGGkA”D!BèD±}Çõò4 !B“DZôÀ½rª ”D!B¢eD¡¡¡¡¡øøk!B “D!ZGÔ;¯49ÛD!B”D“cöÊ@fåQ^ D!B” D®I'_A| Ci @ J!B“DÝ(s° ”D!B¢{7£“D!B”D½DgBænt¿“D!BÑÖý¤ôm ”D!B“D”D!B $! B “A” d d B “A” d SS!|!UY Æ ®« IEND®B` ----------------------------- 26439188689323内容处理:表单数据; NAME = “uploaderMode”

比赛 ----------------------------- 26439188689323--

任何人任何线索为什么它不起作用?谢谢!

回答

1

的问题是因为当你在请求发送FormData对象必须设置contentTypefalse所以没有content-type头中发送。试试这个:

if (asFormData) { 
    cType = false; 
    processData = false; 
} 

还要注意的是,你可以删除需要的asFormData财产只是检查data属性的类型完全发送到你的函数:

if (data.constructor == FormData) { 
    cType = false; 
    processData = false; 
} 
+0

人,你在这里从救了我几个小时的痛苦!:D 像梦一样工作,谢谢。 – BartWD