Le fichier de type d’entrée n’est pas sérialisé dans jquery ajax

Vous trouverez ci-dessous le code du razor lorsque je renvoie le formulaire à la fonction jquery lors de la soumission.

@model Slider @{ Layout = null; } @using (Html.BeginForm("AddOrEdit", "Slider", FormMethod.Post, new { enctype = "multipart/form-data" , onsubmit = "return SubmitForm(this)" })) { @Html.HiddenFor(m => m.Id) 
@Html.LabelFor(m => m.ImageFile, new { @class = "blue-text", @style = "font-size:16px", @id = "" })
}

La fonction Jquery n’est pas en mesure de sérialiser le type de fichier d’entrée et de l’envoyer au contrôleur, sauf si je le change en json. Mais si je le changeais en json je ne recevrais pas la validation

  function SubmitForm(form) { debugger; $.validator.unobtrusive.parse(form); debugger; if ($(form).valid()) { debugger; $.ajax({ type: "POST", url: form.action, //"datatype": "json" data: $(form).serialize(), success: function (data) { if (data.success) { Popup.dialog('close'); dataTable.ajax.reload(); $.notify(data.message, { globalPosition: "top center", className: "success" }) } else { Popup.dialog('close'); $.notify(data.message, { globalPosition: "top center", className: "error" }) } } }); } return false; } 

Essayez le code ci-dessous et apportez quelques modifications au code ajax. Ajoutez les parameters ci-dessous dans votre code.

processData: false, contentType: false,

Et ajoutez var formData = new FormData($("#formID")[0]); ligne avant ajax commence.

Vous devez utiliser FormData pour télécharger des fichiers en utilisant ajax. $(form).serialize() vous donnera juste la clé et la valeur. Vous pouvez utiliser le code ci-dessous pour télécharger des fichiers avec AJAX.

 var formData = new FormData($(form)[0]); $.ajax({ url: form.action, type: form.method, data: formData, processData: false, contentType: false, success: function (response) { } });