2016-12-30 102 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