HttpPostedFileBase始终在ASP.NET MVC中返回null

时间:2011-12-18 11:53:20

标签: asp.net-mvc file-upload

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

5 个答案:

答案 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)">