2012-08-10 67 views
0

我不知道我在想什么,但我需要上传一个使用C#MVC 3的文件。我按照这里的说明操作,但文件总是空的。MVC 3上传文件 - 控制器中的空文件

这里是我的实际测试代码:

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

在MVC中,你需要使用HttpPostedFileBase代替HttpPostedFile

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

我知道我错过了一些愚蠢的东西。谢谢!! – Devmonster 2012-08-10 09:26:32

1

一件事也许你绊倒。

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

例如,如果你的文件输入是这样的:<输入类型= “文件” NAME = “FILEX” ID = “FILEX”/ >

而且你的控制器的方法是这样的: 公众的ActionResult Uploadfile (HttpPostedFileBase filey)

您将为“filey”变量获得NULL。但在你的控制器方法中将“filey”重命名为“filex”,并将其成功发布。

+0

汤姆,好呼唤。这里的帖子只是让我摆脱了几个小时的麻烦。 – Porschiey 2013-10-17 15:53:32