我在ASP.NET MVC中上传文件时遇到问题。 我的代码如下:
查看:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index2</h2>
@using (Html.BeginForm("FileUpload", "Board", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" />
<input type="submit" />
}
控制器:
[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase uploadFile)
{
if (uploadFile != null && uploadFile.ContentLength > 0)
{
string filePath = Path.Combine(Server.MapPath("/Temp"), Path.GetFileName(uploadFile.FileName));
uploadFile.SaveAs(filePath);
}
return View();
}
但uploadFile总是返回null。 任何人都可以找出原因??
答案 0 :(得分:9)
我曾尝试过针对此主题在线发布的大多数解决方案,但发现使用解决方法更好..
无论我做什么HttpPostedFileBase和/或HttpPostedFile总是为空。使用HttpContext.Request.Files集合似乎没有任何麻烦。
e.g。
if (HttpContext.Request.Files.AllKeys.Any())
{
// Get the uploaded image from the Files collection
var httpPostedFile = HttpContext.Request.Files[0];
if (httpPostedFile != null)
{
// Validate the uploaded image(optional)
// Get the complete file path
var fileSavePath =(HttpContext.Server.MapPath("~/UploadedFiles") + httpPostedFile.FileName.Substring(httpPostedFile.FileName.LastIndexOf(@"\")));
// Save the uploaded file to "UploadedFiles" folder
httpPostedFile.SaveAs(fileSavePath);
}
}
在上面的示例中,我只抓取第一个文件,但这只是通过集合循环来保存所有文件。
HTH
罗布
答案 1 :(得分:5)
在我的场景中,问题在于id属性,我有这个:
<input type="file" name="file1" id="file1" />
灵魂就是要删除id:
<input type="file" name="file1" />
答案 2 :(得分:2)
虽然不是这个特定用户的答案,但我想指出HTML requires that the form tag has an enctype attribute with the value multipart/form-data.当然,属性及其值都必须正确。
对于mvc,这意味着在使用beginform时,您应该使用带有htmlAttributes参数的版本
答案 3 :(得分:0)
还可能有另一种情况。在我的情况下,我得到了这个问题,因为我在我的MVC视图中直接渲染脚本标记,IE在那里提出问题。
视图中的正确代码应如下所示:
@section scripts
{
<script>
$(document).ready(function () {
$('.fileinput').fileinput();
...
}
答案 4 :(得分:0)
您需要使用Razor代码来设置输入文件的名称。
<input type="file" name="@Html.Namefor(m => m.propertyName)">