2012-01-10 141 views
2

我有一个ASP.NET MVC 3应用程序。我需要在其中实施文件上传器操作。出于某种原因,当我发布我的表单时,Request.Files集合是空的。我已经能够通过设置断点来确认这一点。所以我知道我正在采取行动。但是,我无法弄清楚为什么Request.Files集合是空的。这里是我的相关HTML,AreaRegistration和Controller片段。ASP.NET MVC 3 - 文件上传

的index.html

<form action="/files/upload/uniqueID" 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> 

MyAreaRegistration.cs

context.MapRoute(
    "FileUpload", 
    "files/upload", 
    new { action = "UploadFile", controller = "Uploader" } 
); 

UploaderController.cs

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(int uniqueID) 
{ 
    foreach (string file in Request.Files) 
    { 
    // I never get here :(
    } 

    return View(); 
} 

我没有对默认的web.config文件进行任何更改。是否需要添加一些设置?我无法弄清楚为什么Request.Files集合是空的。有人可以帮帮我吗?

非常感谢!

+0

你试过使用'Html.Form()'帮手? – jrummell 2012-01-10 13:21:16

+0

[File upload MVC]的可能重复(http://stackoverflow.com/questions/765211/file-upload-mvc) – jrummell 2012-01-10 13:23:01

回答

1

你控制器和做这样的事情

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file) 
{ 

    if (file.ContentLength > 0) 
    { 
     var fileName = Path.GetFileName(file.FileName); 
     var path = Path.Combine(Server.MapPath("~/App_Data/"), fileName); 
     file.SaveAs(path); 
    } 

    return RedirectToAction("Index"); 
} 

而对于视图

<form action="" method="post" enctype="multipart/form-data"> 

    <label for="file">Filename:</label> 
    <input type="file" name="file" id="file" /> 

    <input type="submit" /> 
</form> 

检查菲尔哈克的博客中对于这个问题,您应该使用HttpPostedFileBase:Uploading a File (Or Files) With ASP.NET MVC

1

我相信问题是你action属性,在<form />标签:

action="/files/upload/uniqueID" 

我认为在后它试图将字符串"uniqueID"传递给你的操作方法。当您达到断点时,当您达到操作方法UploadFile()时,您设置的uniqueID参数的值是多少?

使用HtmlHelper.BeginForm()方法使用Razor构造表单。

+0

但我需要为UniqueID发布一个值。换句话说,我需要发布一个ID值和一组文件上传。我怎么做? – user609886 2012-01-11 17:56:56