Я искал в Интернете ищет ответ на эту проблему, но я не могу найти что-нибудь, что работает, у меня есть следующий код контроллера:MVC Jquery загрузки файлов Request.Files всегда пустой
[HttpPost]
public ActionResult UploadFiles()
{
// If files exist
if (Request.Files != null && Request.Files.Count > 0)
{
// ** Do stuff
return Json(new { result = true, responseText = "File(s) uploaded successfully" });
}
// Return no files selected
return Json(new { result = false, responseText = "No files selected" });
}
И следующий код на моей странице cshtml, который отлично работает и контроллер может видеть файлы, которые я загрузить:
<input type="file" name="files" id="files" accept="image/*;capture=camera" multiple>
<button type="button" onclick="submitform()">Submit</button>
<script>
function submitform(){
// Get files from upload
var files = $("#files").get(0).files;
// Create form data object
var fileData = new FormData();
// Loop over all files and add it to FormData object
for (var i = 0; i < files.length; i++) {
fileData.append(files[i].name, files[i]);
}
// Send files to controller
var xhr = new XMLHttpRequest();
xhr.open("POST", "/Quotes/QuoteFiles/UploadFiles", false);
xhr.send(fileData);
}
</script>
Однако, когда я пытаюсь изменить эту работу, используя вызов Ajax, как показано ниже, затем Request.Files в контроллере всегда нет файлов. Бит только я изменил это «Отправить файлы на контроллер» часть:
<input type="file" name="files" id="files" accept="image/*;capture=camera" multiple>
<button type="button" onclick="submitform()">Submit</button>
<script>
function submitform(){
// Get files from upload
var files = $("#files").get(0).files;
// Create form data object
var fileData = new FormData();
// Loop over all files and add it to FormData object
for (var i = 0; i < files.length; i++) {
fileData.append(files[i].name, files[i]);
}
// Send files to controller
$.ajax({
url: '/Quotes/QuoteFiles/UploadFiles',
type: "POST",
contentType: false, // Not to set any content header
processData: false, // Not to process data
data: fileData,
success: function (result) {
alert(result);
},
error: function (err) {
alert(err.statusText);
}
});
}
</script>
Я бег это в Google Chrome, но я попробовал IE 11 и края, но не их работу. Может ли кто-нибудь сказать мне, что я делаю неправильно?
есть ли какие-либо сообщения об ошибках, зарегистрированные в 'console'? Что возвращает строку как ответ' JSON'? – guest271314
Я не думаю, что вы можете загружать файлы с помощью ajax, вы можете сделать это с помощью iframe для имитации эффекта – AbdulHamid
@AbdulHamid Файлы могут быть загружены с помощью '$ .ajax()' – guest271314