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
相关产品推荐
相关产品推荐

