2012-01-12 31 views
0

這是ASP.NET MVC 3 - File Upload的後續問題。我有一個我無法更改的URL語法。我需要以「/ person/{personID}/files」的語法將文件上傳到網址。目前,我正嘗試以下操作:發佈到ASP.NET MVC3中的文件和參數的操作

的index.html

<form action="/person/2/files" method="post" enctype="multipart/form-data"> 
    <div>Please choose a file to upload.</div> 
    <div><input id="fileUpload" type="file" /></div> 

    <div><input type="submit" value="upload" /></div> 
</form> 

,將personId參數值動態填充表單加載時。無論如何,當我點擊「上傳」,我張貼回了以下行動:

UploadController.cs

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(int uniqueID) 
{ 
    foreach (string file in Request.Files) 
    { 
    // Request.Files is empty 
    } 

    return View(); 
} 

我如何使用這兩個文件的收集和使用URL參數「/ person/{personID}/files」的語法?我知道這是一個非常具體的要求。我的項目已經耗盡了時間,我完全迷惑爲什麼我使用的方法無法正常工作。有人能幫幫我嗎?

非常感謝。

回答

6

假設你有自訂網址定義的路由:

routes.MapRoute(
    "Upload", 
    "person/{uniqueid}/files", 
    new { controller = "Upload", action = "UploadFile" } 
); 

你只需要給你的文件輸入一個名稱:

<div><input id="fileUpload" type="file" name="file" /></div> 

此外,我會建議你使用操作的參數,而不是通過Request.Files

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(int uniqueID, HttpPostedFileBase file) 
{ 
    return View(); 
} 

如果您想要pos牛逼多個文件:

<div><input type="file" name="files" /></div> 
<div><input type="file" name="files" /></div> 
<div><input type="file" name="files" /></div> 
... 

使用集合:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(int uniqueID, IEnumerable<HttpPostedFileBase> files) 
{ 
    return View(); 
} 

您也可能會發現following blog post有用。

甚至更​​好,使用視圖模型:

public class MyViewModel 
{ 
    public int UniqueID { get; set; } 
    public IEnumerable<HttpPostedFileBase> Files { get; set; } 
} 

然後:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(MyViewModel model) 
{ 
    return View(); 
} 
+0

哇。非常感謝。 「名稱」屬性解決了我的問題。 – user609886 2012-01-12 13:13:14