Carga del archivo ajax JQuery en ASP.NET con todos los datos del formulario

Estoy creando un sitio web, que tiene una página de carrera con Control de HTML de archivo de entrada para reanudar la carga. Mientras usa JQuery para POSTAR los valores de formulario a una página ASPX, todo funciona bien, excepto la carga de archivos. ¿Cómo puedo usar JQuery para publicar todos los campos (incluidos los archivos) en una solicitud AJAX? El ejemplo que veo en Google está manejando solo la carga del archivo, no otros campos con él. Este es mi JQuery, ASPX para cargar archivos no hecho.

 $(document).ready(function(e) { // File variable var files; // Add events $('#resume').on('change', prepareUpload); // Grab the files and set them to our variable function prepareUpload(event) { files = event.target.files; } $( "#submit_btn" ).click(function( ) { var fileData = new FormData(); $.each(files, function(key, value) { fileData.append(key, value); }); var formMessage = tinyMCE.get('message').getContent(); var formName = $('.contact-container #name').val(); var formPhone = $('.contact-container #phone').val(); var formEmail = $('.contact-container #email').val(); var formApplyFor = $('.contact-container #applyfor').val(); // Get some values from elements on the page: var a= $.ajax({ method: "POST", url: "mail/test.aspx", processData: false, contentType: false, data: { form: 'career', name: formName , phone: formPhone, email: formEmail, applyfor: formApplyFor, resume: fileData, coverletter: window.btoa(unescape(encodeURIComponent( formMessage))) }, success: function (data) { alert('success'); }, error: function (data) { alert('err'); } }) .done(function( msg ) { alert('done'); }); //ajax end alert(a); }); //submit button end }); //document ready end  

Probablemente es porque no debe tratarlo por separado sino como un objeto de formulario (formData)

Aquí puede encontrar un ejemplo con un formulario que contiene ambos campos “primitivos”, así como un campo de archivo

https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData

Hice una prueba rápida para demostrar que funciona con ASP.NET MVC:

HTML y Javascript:

 
function submit() { var form = document.querySelector('form'); var data = new FormData(form); $.ajax({ type: "POST", url: "Home/Upload", data: data, processData: false, contentType: false }); }

ASP.NET MVC:

  public ActionResult Upload() { foreach (string file in Request.Files) { var fileContent = Request.Files[file]; if (fileContent != null && fileContent.ContentLength > 0) { var stream = fileContent.InputStream; var fileName = fileContent.FileName; //you can do anything you want here } } foreach (string key in Request.Form) { var value = Request.Form[key]; } return Content("OK"); } 

introduzca la descripción de la imagen aquí

Por supuesto, podría hacerse mejor atando a un modelo, etc …

Si sus campos primitivos no están dentro de un formulario, usaría agregar para agregarlos al objeto formData y luego tratar de enviar solo este objeto solo. Espero que esto ayude