MVC 3上传文件 - 控制器中的空文件

时间:2012-08-10 09:15:16

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

我不知道我缺少什么,但我需要使用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文件,但都没有。

除了 这些代码之外,我是否应该配置其他内容?

由于

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

还有一件事可能会让你失望。

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

例如,如果您的文件输入如下所示:&lt; input type =“file”name =“filex”id =“filex”/&gt;

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

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