2016-12-30 6 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 и DATATYPE это 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 Заголовки (от FireBug)

Принять приложения/JSON, т ext/javascript, /; д = 0,01 Accept-Encoding GZIP, выкачать Accept-Language ен-ГБ, ан; д = 0,5 Content-Length Cookie 936 Content-Type многочастному/форм-данных ASP.NET_SessionId = mzppxvimv03qb0smtyrgdw3z Хост локальный: 64727 Referer http://localhost:64727/Home/Contact пользователя -агент Mozilla/5.0 (Windows NT, 10.0; Win64; 64; с.в.: 50.0) Gecko/20100101 Firefox/50.0 X-Requested-С XMLHttpRequest

ПОСТ Пример (От FireBug):

----------------------------- 26439188689323 Content-Disposition: fo ет-данные; Name = "imageFiles"; имя файла = "WWKDK33.jpg" Content-Type: изображение/JPEG

PNG IHDR "" xÕj7IDATxÚíÚK ÐÞÿÒzB3 ~ Þ О.Б. | nHàøÈ B "D" D! B $! B "D" D! B $ ! B "Dcdtå] μ B" D! BÔKtb_xv-! B "Dunð + ¯uÔ" D! BÑS * "B" D! B (Õ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¡¡yéék! B "D! ZGÔ; ¯49ÛD! B" D "cöÊ @ fåQ^D! B" D®I4_à | Ci @ J! B "DÝ (s ° " D! B ¢ {7 £ ÌÁ "D! B" D½DgBæant¿ "D! BÑÖý¤ôm " D! B "D" D! B $! B "A" D D B "A" D ß |!! UY Æ ® « IEND®B` ----------------------------- 26439188689323 Content-Disposition: данные формы ; Name = "uploaderMode"

турнир ----------------------------- 26439188689323--

Любой любые подсказки относительно того, почему это не работает? Благодаря!

ответ

1

Проблема в том, что при отправке FormData объекта в запросе вы должны установить contentType в false так, что ни content-type заголовок не отправляется. Попробуйте это:

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

Также обратите внимание, что вы можете удалить необходимость отправить asFormData свойство вашей функции полностью просто проверить тип data собственности:

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

Человек, ты спас меня сюда из часов боли!: D Работает как сон, спасибо. – BartWD