2012-08-10 49 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