我需要一些帮助。我正在尝试使用<input type="file">
上传文件。这是我的观点:
@using (Html.BeginForm("BookAdd", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="files[0]" id="files[0]" />
<input type="file" name="files[1]" id="files[1]" />
<input type="submit" value="Upload Book" />
}
这是一个应该处理上传文件的动作。
[HttpPost]
public ActionResult BookAdd(IEnumerable<HttpPostedFileBase> files)
{
// some actions
return View();
}
问题是“files”总是包含两个null元素。 可以做些什么来解决它?
是时候发布一些消息了。好像我发现了问题,但我仍然不知道如何修复它。看来,尽管我在这里使用“multipart / form-data”:
@using (Html.BeginForm("BookAdd", "Admin", FormMethod.Post, new { enctype="multipart/form-data" }))
{
<input type="file" name="File" id="file1" />
<input type="file" name="File" id="file2" />
<input type="submit" value="Upload Book" />
}
Request.ContentType
在控制器中仍然是“application / x-www-forum-urlencoded”..
答案 0 :(得分:37)
问题是该字段的NAME需要与控制器参数匹配。
在您的情况下是“文件”...所以您的name
属性也应该是“文件”。
答案 1 :(得分:31)
只需删除输入字段名称中的方括号:
@using (Html.BeginForm("BookAdd", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="files" id="file1" />
<input type="file" name="files" id="file2" />
<input type="submit" value="Upload Book" />
}
更新:
在查看示例项目后,您发送给我的问题是您有2个嵌套表单。 HTML中不允许这样做。您的_Layout.cshtml
中有一个表单,BookAdd.cshtml
视图中有另一个表单。这就是为什么尽管你的内部表格上有enctype="multipart/form-data"
属性,你却得到了错误的Request.ContentType
。因此,如果您希望这样做,您将不得不取消这些表格。同样在您发送给我的BookAdd
控制器操作的示例中没有正确的签名文件列表,但我想这是由于您正在进行的一些测试。
答案 2 :(得分:7)
我遇到了同样的问题,但就我而言,我得到了解决方案。
[HttpPost]
public ActionResult Upload()
{
foreach (string file in Request.Files)
{
fileurl = Request.Files[file];
}
return View();
}
在设计视图中。如果使用母版页,请注释表格标记<%-- <form id="form1" runat="server">--%>
...我希望您的问题能够得到解决......
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Upload
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%-- <form id="form1" runat="server">--%>
<% using (Html.BeginForm("Upload","Home",FormMethod.Post,new {enctype="multipart/form-data"}))
{ %>
<fieldset>
<legend>Upload File</legend>
<div>
<p>
Select a File: <input type="file" name="FileUpload" />
<input type="submit" value="Upload" />
</p>
</div>
</fieldset>
<% } %>
答案 3 :(得分:3)
值得注意的是,如果您使用的是AJAX,那么上传将始终为null,因此请确保没有jquery AJAX附加到表单提交。
答案 4 :(得分:2)
你必须这样写:
public class DocumentModelView
{
public HttpPostedFileBase File1 { get; set; }
public HttpPostedFileBase File2 { get; set; }
}
@model Models.DocumentModelView
@using( Html.BeginForm( "Create", "Document", FormMethod.Post, new { enctype = "multipart/form-data" }) )
{
<input type="file" name="File1" />
<input type="file" name="File2" />
<input type="submit" value="send" />
}
[HttpPost]
public ActionResult Create( DocumentModelView modelView )
{
.....
}
答案 5 :(得分:1)
在我的情况下,y必须使用名称而不是id。
像这样:
<input type="file" id="upload" name="upload" />