0

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);                                                                  
            }                                                                                                 
        });                                                                                                   
    }                                                                                                         
}

控制器.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);                                                  
}
4

2 回答 2

0

尝试提交 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,
      [...]
});
于 2018-08-30T17:17:53.200 回答
0

解决方法是使用这个插件

https://jquery-form.github.io/form/

这样

$(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);
                }
            });

检查插件网站

于 2018-08-30T22:38:07.297 回答