Как отправить файлы через jQuery AJAX с несколькими параметрами на контроллер MVC? - PullRequest
0 голосов
/ 30 августа 2018

enter code here Я прочитал несколько ответов на этот вопрос, но никто не работает.

У меня есть следующий код, но мой массив HttpPostedFileBase[] всегда пуст. Другие параметры имеют правильное значение, но HttpPostedFileBase[] всегда равно нулю.

Что мне не хватает ??

$('#myFile').on('change', function (e) {                                                                      
    var fileName = e.target.files[0].name;                                                                    

    archivosProcesar = new FormData();                                                                        

    for (var i = 0; i <= e.target.files.length -1; i++) {                                                     
        archivosProcesar.append(i, e.target.files[i]);                                                        
    }                                                                                                         
});                                                                                                           

function aplicarFragmentacion() {                                                                             
    var ids = obtenerAfiliadosSeleccionados();                                                                
    var data = {                                                                                              
        fragmento1: parseInt($('#fragmento1').val()),                                                         
        fragmento2: parseInt($('#fragmento2').val()),                                                         
        segmentos: ids,                                                                                       
        archivos: archivosProcesar                                                                            
    }                                                                                                         

    if (!validarProcentajes() & !validarSeleccionados(ids)) {                                                 
        $.ajax({                                                                                              
            data: data,                                                                                       
            url: urlAplicarFrag,                                                                              
            type: 'POST',                                                                                     
            processData: false,                                                                               
            beforeSend: function () {                                                                         
                //$("#resultado").html("Procesando, espere por favor...");                                    
            },                                                                                                
            success: function (data) {                                                                        
                onSuccessAplicarFragmentacion(data);                                                          
            },                                                                                                
            error: function (jqXHR, textStatus, errorThrown) {                                                
                console.log(jqXHR.responseText);                                                              
                onError(jqXHR.responseText);                                                                  
            }                                                                                                 
        });                                                                                                   
    }                                                                                                         
}

Controller.cs

public async Task<ActionResult> AplicarFragmentacion(decimal fragmento1, decimal fragmento2, string[] segment\
os, HttpPostedFileBase[] archivos)                                                                            
{                                                                                                             
    List<Credito> lstSegmentos = new List<Credito>();                                                         
    try                                                                                                       
        {                                                                                                     
            ProgressHub.SendMessage("Iniciando proceso de fragmentación...", 10);                             
            lstSegmentos = await FragmentacionNegocio.AplicarFragmentacion(fragmento1, fragmento2, segmentos)\
;                                                                                                             
        }                                                                                                     
    catch (Exception ex)                                                                                      
        {                                                                                                     
            throw new Exception(ex.Message);                                                                  
        }                                                                                                     

    return Json(lstSegmentos, JsonRequestBehavior.AllowGet);                                                  
}

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Исправлено использование этого плагина в

https://jquery -form.github.io / форма /

Таким образом

$(this).ajaxSubmit({
                url: urlAplicarFrag,
                data: {
                    fragmento1: parseInt($('#fragmento1').val()),
                    fragmento2: parseInt($('#fragmento2').val()),
                    segmentos: ids,
                    fechaReenvio: $('#fecha-reenvio').val()
                },
                success: function (data) {
                    onSuccessAplicarFragmentacion(data);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    console.log(jqXHR.responseText);
                    onError(jqXHR.responseText);
                }
            });

проверьте плагин на сайте

0 голосов
/ 30 августа 2018

Попробуйте отправить объект FormData, а не анонимный объект с полем FormData. Также я понимаю, что для contentType должно быть установлено значение false.

var formData = new FormData();
formData.append('fragmento1', parseInt($('#fragmento1').val());
formData.append('fragmento2', parseInt($('#fragmento2').val());
formData.append('segmentos', obtenerAfiliadosSeleccionados());
formData.append('archivos', $('#fileupload')[0].files[0]);

$.ajax({
      type: 'POST',
      data: formData,
      url: urlAplicarFrag,
      type: 'POST',
      processData: false,
      contentType: false,
      [...]
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...