Я пытаюсь отправить файл через ajax для действия в контроллере, я знаю, что есть много существующих вопросов по этой теме, но ни один из них не решил мою проблему.
У меня естьпосмотреть, где пользователи будут загружать файл, и я пытаюсь получить этот файл в контроллере, но я всегда получаю 0 в результате Request.Files.Count ();
Действие, вызываемое в ajax, отличаетсяс реального вида.
Я использую MVC5 с ASP.NET и C #
Надеюсь, вы можете мне помочь.Спасибо!.
Мой взгляд:
`@using (Html.BeginForm("editProject", "Projects", new { area = "admin" },
FormMethod.Post, new { @class = "form-horizontal", role = "form", enctype =
"multipart/form-data" }))
{
@Html.AntiForgeryToken()
<input type="file" id="inpFile" name="attachment" multiple>
}`
Javascript:
<script type="text/javascript">
var res = document.getElementById("inpFile");
res.addEventListener("change", function () {
files = document.getElementById("inpFile").files;
data = new FormData();
data.append(files[0].name, files);
$.ajax({
url: "@Url.Action("SaveFile", "Projects",new { area = "admin" })",
type: "POST",
datatype: "json",
data: data,
contentType: false,
processData: false,
success: function (data) {
console.log(data.UploadedFileCount + ' file(s) uploaded
successfully');
}
});
});
</script>
Контроллер:
public JsonResult SaveFile()
{
for (int i = 0; i < Request.Files.Count; i++)
{
var file = Request.Files[i];
// saving file...
}
return Json(new { UploadedFileCount = Request.Files.Count });
}
ОБНОВЛЕНИЕ:
Я решил это.
Эта строка была неправильной:
data.append(files[0].name, files);
Должно быть так:
data.append(files[0].name, files[0]);