【问题标题】:MVC 3 Uploading File - Null File in ControllerMVC 3 上传文件 - 控制器中的空文件
【发布时间】:2012-08-10 09:15:15
【问题描述】:

我不知道我缺少什么,但我需要使用 C# MVC 3 上传文件。我按照 SO 中的说明进行操作,但文件始终为空。

这是我的实际测试代码:

HTML

@using (Html.BeginForm("Prc", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
   <input type="file" name="file" id="file" />
   <input type="submit" value="submit" />
}

控制器

[HttpPost]
public ActionResult Prc(HttpPostedFile file)
{
    if (file != null && file.ContentLength > 0)
    {
        var filename = System.IO.Path.GetFileName(file.FileName);
        var path = System.IO.Path.Combine(Server.MapPath("~/Content/Images"), filename);
        file.SaveAs(path);            
     }

     return RedirectToAction("Index");
 }

当我运行 Web 应用程序时,我附加了一个文件,然后单击提交。但是当我到达Controller 时,file 对象是null。始终null。我尝试了一个XML 文件、一个JPEG 文件和一个GIF 文件,但它们都不起作用。

除了这些代码之外,我还应该配置其他东西吗?

谢谢

【问题讨论】:

    标签: asp.net-mvc-3 c#-4.0 file-upload asp.net-mvc-controller


    【解决方案1】:

    在 MVC 中,您需要使用 HttpPostedFileBase 而不是 HttpPostedFile

    [HttpPost]
    public ActionResult Prc(HttpPostedFileBase file)
    {
        //...
    }
    

    【讨论】:

      【解决方案2】:

      还有一件事可能会让你绊倒。

      使用asp.net mvc 3 razor,我惊讶地发现传递给控制器​​方法的HttpPostedFileBase变量的name必须与文件输入标签的id和name匹配看法。否则 asp.net 为 HttpPostedFileBase 变量传递 null。

      例如,如果您的文件输入如下所示:

      您的控制器方法如下所示: public ActionResult Uploadfile(HttpPostedFileBase filey)

      “filey”变量将为 NULL。但是在您的控制器方法中将“filey”重命名为“filex”,它会成功发布文件。

      【讨论】:

      • 汤姆,好声音。你在这里的帖子让我摆脱了几个小时的麻烦。
      • 是的,这里也一样!我被困住了,这是一件愚蠢的事情!谢谢!
      猜你喜欢
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多