C# 简单文件上传返回空值?
我正试图在MVC5中完成我的第一个简单文件上传。我正在遵循我发现的一系列示例,但由于某种原因,在我的“创建”ActionResult中,上载文件总是以NULL形式出现,因此上载代码永远不会运行。有人知道我可能做错了什么吗C# 简单文件上传返回空值?,c#,asp.net-mvc,C#,Asp.net Mvc,我正试图在MVC5中完成我的第一个简单文件上传。我正在遵循我发现的一系列示例,但由于某种原因,在我的“创建”ActionResult中,上载文件总是以NULL形式出现,因此上载代码永远不会运行。有人知道我可能做错了什么吗 @{ ViewBag.Title = "Create"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Documents.</h2> <h4>Upload a new d
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Documents.</h2>
<h4>Upload a new document.</h4>
<div class="well">
@using (Html.BeginForm("Create", "Documents", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<h3>Select a file to upload. </h3>
<input type="file" name="files" value="" multiple="multiple" />
<input type="submit" value="Upload your file" title="Upload" />
<div style="color:Red;font-size:14px">@ViewBag.Message</div>
}
</div>
文件输入元素的名称应与操作方法参数名称匹配 因此,请更新HTML标记,使其具有相同的
名称
属性值
<input type="file" name="uploadFile" value="" multiple="multiple" />
或更改动作方法参数名称以与文件输入元素名称匹配
<input type="file" name="files" value="" multiple="multiple" />
将multiple=“multiple”
属性添加到输入元素时,浏览器将允许最终用户一次选择多个文件。在这种情况下,如果动作方法参数是HttpPostedFileBase
对象的单个实例,它将从所选n
文件接收第一个文件。如果需要所有文件,可以将参数更改为集合,例如
[HttpPost]
public ActionResult Create(IEnumerable<HttpPostedFileBase> files)
{
if (files != null && files.Any())
{
foreach (var file in files)
{
if (file.ContentLength > 0)
{
//do something
}
}
}
}
[HttpPost]
公共操作结果创建(IEnumerable文件)
{
if(files!=null&&files.Any())
{
foreach(文件中的var文件)
{
如果(file.ContentLength>0)
{
//做点什么
}
}
}
}
谢谢,就这样。一旦我得到匹配的元素名和.MapPath中缺少的斜杠,它就起作用了。@Caverman:不客气!IMHO,尝试使用Path.combined
而不是手动连接,如图所示,我最初从我找到的一个示例中得到了它,但我返回到simple Server.MapPath,看看这是否有什么不同,当然没有。我要回到那条小路上去。
<input type="file" name="files" value="" multiple="multiple" />
[HttpPost]
public ActionResult Create(HttpPostedFileBase files)
{
if(files!= null && files.ContentLength > 0)
{
// do something
}
}
[HttpPost]
public ActionResult Create(IEnumerable<HttpPostedFileBase> files)
{
if (files != null && files.Any())
{
foreach (var file in files)
{
if (file.ContentLength > 0)
{
//do something
}
}
}
}