2012-01-10 4 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

+0

Возможный дубликат [Загрузка файла MVC] (http://stackoverflow.com/questions/765211/file-upload-mvc) – jrummell

ответ

1

Вы должны использовать HttpPostedFileBase для вас контроллер и сделать что-то вроде этого

[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> 

Check Фил Хаак блог здесь для этой проблемы: Uploading a File (Or Files) With ASP.NET MVC

1

Я считаю, что проблема с вашим атрибутом action в вашем <form /> тег:

action="/files/upload/uniqueID" 

Я думаю, что на пост он пытается передать строку "uniqueID" вашему методу действий. Когда вы нажмете свою точку останова, каково значение вашего параметра uniqueID, установленного в момент достижения метода действия UploadFile()?

Используйте метод HtmlHelper.BeginForm(), чтобы использовать Razor для создания формы.

+0

Мне нужно POST значение для UniqueID, хотя. Другими словами, мне нужно установить POST идентификатор и коллекцию файлов для загрузки. Как мне это сделать? – user609886

Смежные вопросы