2012-01-12 76 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