MVC 中的简单 dropzone 实现 ASP.Net - 如何在控制器中获取数据?



我正在尝试在 ASP.Net MVC中实现Dropzone.js。我尝试了一切,但不知何故我无法在控制器中收到丢弃的文件。该变量只是 NULL。

我的视图如下所示:

<h2>DropZoneUp</h2>
<form action='@Url.Action("DropZoneUpload")'class="dropzone"id="my-awesome-dropzone">
</form>

<script src="~/Scripts/dropzone.js"></script>

我的控制器如下所示:

[HttpPost]
public ActionResult DropZoneUpload(IEnumerable<HttpPostedFileBase> files)
{
foreach (var file in files)
{
string filePath = Guid.NewGuid() + Path.GetExtension(file.FileName);
file.SaveAs(Path.Combine(Server.MapPath("~/ExcelNDropUpload"), filePath));
}
return Json("fileupload successfully");
}

控制器实际上是从视图调用的。但是"IEnumerable files"为空。 有人知道我做错了什么吗?

提前感谢!

此致敬意 胡子熊

听起来您忘记包含enctype="multipart/form-data"属性并使用method="post",因为目标控制器操作已HttpPostAttribute(默认情况下,如果您未在表单标记中指定HTTP方法,它将设置为GET(。正确的代码应该是这样的:

<form action='@Url.Action("DropZoneUpload")' class="dropzone" id="my-awesome-dropzone" enctype="multipart/form-data" method="post">
<!-- other form elements -->
</form>

或者使用BeginForm助手:

@using (Html.BeginForm("DropZoneUpload", "ControllerName", FormMethod.Post, new { @class = "dropzone", id = "my-awesome-dropzone", enctype = "multipart/form-data" }))
{
@* other form elements *@
}

如果要将任何文件与其他输入元素值一起发布,则必须multipart/form-data

如果您发布该表单的发布/提交方法,那就太好了。 我发现有些人试图做和你一样的事情,你可能会尝试参考这个问题: 在一个请求中上传多个文件-放置区发送两个请求

最新更新