jQuery ajax carica il file in asp.net mvc

Ho un file a mio avviso

e una richiesta di ajax

 $.ajax({ url: '', dataType: 'json', processData: false, contentType: "multipart/mixed", data: { Id: selectedRow.Id, Value: 'some date was added by the user here :))' }, cache: false, success: function (data) {} }); 

ma non ci sono file in Request.Files . Cosa c’è di sbagliato con la richiesta Ajax?

Carica i file usando AJAX in ASP.Net MVC

Le cose sono cambiate da HTML5

JavaScript

 document.getElementById('uploader').onsubmit = function () { var formdata = new FormData(); //FormData object var fileInput = document.getElementById('fileInput'); //Iterating through each files selected in fileInput for (i = 0; i < fileInput.files.length; i++) { //Appending each file to FormData object formdata.append(fileInput.files[i].name, fileInput.files[i]); } //Creating an XMLHttpRequest and sending var xhr = new XMLHttpRequest(); xhr.open('POST', '/Home/Upload'); xhr.send(formdata); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { alert(xhr.responseText); } } return false; } 

controllore

 public JsonResult Upload() { for (int i = 0; i < Request.Files.Count; i++) { HttpPostedFileBase file = Request.Files[i]; //Uploaded file //Use the following properties to get file's name, size and MIMEType int fileSize = file.ContentLength; string fileName = file.FileName; string mimeType = file.ContentType; System.IO.Stream fileContent = file.InputStream; //To save file, use SaveAs method file.SaveAs(Server.MapPath("~/")+ fileName ); //File will be saved in application root } return Json("Uploaded " + Request.Files.Count + " files"); } 

EDIT : l'HTML

 

I caricamenti di file AJAX sono ora possibili passando un object FormData alla proprietà data della richiesta $.ajax .

Poiché l’OP ha chiesto espressamente un’implementazione di jQuery, ecco qui:

 

 $('#upload').submit(function(e) { e.preventDefault(); // stop the standard form submission $.ajax({ url: this.action, type: this.method, data: new FormData(this), cache: false, contentType: false, processData: false, success: function (data) { console.log(data.UploadedFileCount + ' file(s) uploaded successfully'); }, error: function(xhr, error, status) { console.log(error, status); } }); }); 
 public JsonResult Survey() { for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; // save file as required here... } return Json(new { UploadedFileCount = Request.Files.Count }); } 

Ulteriori informazioni su FormData su MDN

Non è ansible caricare file tramite ajax, è necessario utilizzare un iFrame o altri trucchi per fare un postback completo. Ciò è principalmente dovuto a problemi di sicurezza.

Ecco una discreta documentazione che include un progetto di esempio che utilizza SWFUpload e ASP.Net MVC di Steve Sanderson. È la prima cosa che ho letto nel funzionare correttamente con Asp.Net MVC (anch’io ero nuovo a MVC in quel momento), speriamo che sia di aiuto per te.

Se pubblichi un modulo usando ajax, non puoi inviare immagini usando il metodo $ .ajax, devi usare il classico metodo xmlHttpobject per salvare l’immagine, altra alternativa usa il tipo di invio invece del pulsante

Ho un esempio come questo nella versione di vuejs: v2.5.2