HttpPostedFileBase总是在ASP.NET MVC中返回null

在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。 任何人都可以找出原因?

 @{ 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" name="uploadFile"/> <input type="submit" /> } 

你必须提供名称inputtypes文件uploadFile为了build模在ASP.net mvc和绑定工作
还要确保你的inputtypes文件名HttpPostedFileBase 参数名是相同的。

我已经尝试了在线发布的关于这个主题的大部分解决scheme,但是发现最好使用解决方法。

真的没关系,我做的HttpPostedFileBase和/或HttpPostedFile总是空的。 使用HttpContext.Request.Files集合似乎没有任何麻烦。

例如

  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

在我的情况下,问题是与id属性,我有这样的:

 <input type="file" name="file1" id="file1" /> 

精神是去除id:

 <input type="file" name="file1" /> 

还可以有另一种情况。 在我的情况下,我得到这个问题,因为我直接在我的MVC视图呈现脚本标记,IE浏览器给出了问题。

在视图中正确的代码应该如下:

 @section scripts { <script> $(document).ready(function () { $('.fileinput').fileinput(); ... } 

虽然不是这个特定用户的答案,但我想指出的是, HTML要求表单标签具有值为multipart / form-data的enctype属性。 当然,这个属性和它的价值必须是正确的。

对于mvc,这意味着在使用beginform时,应该使用带有htmlAttributes参数的版本