You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# MVC中jQuery FormData发送图片与列表数据的问题排查

问题描述

在VS2022 C# MVC项目中,尝试通过jQuery Ajax结合FormData发送图片文件、对象及列表数据,但后端控制器接收时列表值为空(控制台可见列表已成功发送)。尝试不使用FormData发送会触发图片相关错误;尝试将列表转为逗号分隔字符串再转换为实体列表时,出现CS1503类型转换错误。之后按建议拆分请求:第一次提交列表数据成功并返回交易编号,存入input后,第二次发送图片时无法获取该编号(始终为0),但图片可正常接收。

初始请求代码

var ImagenSeleccionada1 = $("#fileProducto1")[0].files[0];
var ImagenSeleccionada2 = $("#fileProducto2")[0].files[0];
var ImagenSeleccionada3 = $("#fileProducto3")[0].files[0];
var numero = $("#txtNumero").val();

var transaccion = {
    movUser : "@User.Identity.Name",
    movIdTransaction: "2",
    movNumero: numero,
    movEntidad: $("#cbbentidad").val()
}

var lista_conceptos = [];

$("#tabla tbody tr").each(function (index) {
    var concepto = $(this).find("td").eq(0).html();
    var check = $(this).find("input").prop('checked');
    var calificacion ="NO CUMPLE"
    if (check) {
        calificacion = "CUMPLE";
    }
    lista_conceptos.push({
        movNumero: numero,  
        movIdTransaction: 2,
        movConcepto: concepto,
        movCalificacion: calificacion,
    })
})

console.log(lista_conceptos)

var request = new FormData();
request.append("objeto", JSON.stringify(transaction));
request.append("listaconceptos", JSON.stringify(lista_conceptos));
request.append("archivoImagen1", ImagenSeleccionada1);
request.append("archivoImagen2", ImagenSeleccionada2);
request.append("archivoImagen3", ImagenSeleccionada3);

//SEND TRANSACTION
jQuery.ajax({
    url: '@Url.Action("RegistrarInspeccion", "Transactions")',
    type: "POST",
    data: request,
    processData: false,
    contentType: false,
    success: function (data) {
    }
});

控制器接收代码

[HttpPost]
public async Task<JsonResult> RegistrarInspeccion(string objeto, List<EntidadDetalleTransaccion> listaconceptos, HttpPostedFileBase archivoImagen1, HttpPostedFileBase archivoImagen2, HttpPostedFileBase archivoImagen3)

字符串转换尝试代码

public async Task<jsonresult> RegistrarInspeccion(string objeto, string listaconceptos, HttpPostedFileBase archivoImagen1, HttpPostedFileBase archivoImagen2, HttpPostedFileBase archivoImagen3)
{
    char delimiter = ',';
    string[] substrings = listaconceptos.Split(delimiter);
    List<entidaddetalletransaccion> myList = new List<entidaddetalletransaccion>(substrings);
}

拆分请求代码

function AdicionarMovimiento() {

    if ($("#cbbentidad").val() == 0 || $("#cbbentidad").val() == null) {
        swal("", "Debe seleccionar una entidad.", "warning");
        return
    }

    EnviarTransaccionOperacion();
    EnviarImagenesenTransaccionOperacion();
}

function EnviarTransaccionOperacion() {
    var transaction = {
        movConductor: "@User.Identity.Name",
        movIdTransaction: "2",
        movNumero: 0,
        movEntidad: $("#cbbentidad").val()
    }

    var lista_conceptos = [];

    $("#tabla tbody tr").each(function (index) {
        var concepto = $(this).find("td").eq(0).html();
        var check = $(this).find("input").prop('checked');
        var calificacion = "NO CUMPLE"
        //var check = $(this).find('Cumple').prop('checked');
        if (check) {
            calificacion = "CUMPLE";
        }

        lista_conceptos.push({
            movNumero: 0,  //ojo se envía pero en el proc almac se actualiza
            movIdTransaction: 2,
            movConcepto: concepto,
            movCalificacion: calificacion
        })
    })

    console.log(lista_conceptos);

    jQuery.ajax({
        url: '@Url.Action("RegistrarInspeccion", "Transactions")',
        type: "POST",
        data: JSON.stringify({ oTransaction: transaction, listaconceptos: lista_conceptos }),
        datatype: "json",
        contentType: "application/json; charset=utf-8",

        success: function (data) {
            console.log(data)
            $("#txtNumero").val(data.numeromovimiento);
        }
    })
}


function EnviarImagenesenTransaccionOperacion() {

    var transaction = {
        movConductor: "@User.Identity.Name",
        movIdTransaction: "2",
        movNumero: 0,
        movEntidad: $("#cbbentidad").val()
    }

    var ImagenSeleccionada1 = $("#fileProducto1")[0].files[0];
    var ImagenSeleccionada2 = $("#fileProducto2")[0].files[0];
    var ImagenSeleccionada3 = $("#fileProducto3")[0].files[0];

    var request = new FormData(); 
    request.append("objeto", JSON.stringify(transaction));
    request.append("numeromovimiento", $("#txtNumero").val());
    request.append("archivoImagen1", ImagenSeleccionada1);
    request.append("archivoImagen2", ImagenSeleccionada2);
    request.append("archivoImagen3", ImagenSeleccionada3);

    jQuery.ajax({
        url: '@Url.Action("RegistrarInspeccionImagenes", "Transactions")',
        type: "POST",
        data: request,
        processData: false,
        contentType: false, 
        success: function (data) {
        }
    })
}

内容的提问来源于stack exchange,提问作者Fernando Diaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:47:06