ASP.NET MVC 3 - загрузка файла - PullRequest
2 голосов
/ 10 января 2012

У меня есть приложение ASP.NET MVC 3.Мне нужно реализовать действие загрузки файла внутри него.По какой-то причине, когда я публикую свою форму, коллекция Request.Files пуста.Я смог подтвердить это, установив точку останова.Итак, я знаю, что достигаю действия.Однако я не могу понять, почему коллекция Request.Files пуста.Вот мои соответствующие фрагменты HTML, AreaRegistration и Controller.

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 была бы пустой.Может кто-нибудь, пожалуйста, помогите мне?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 10 января 2012

Вы должны использовать 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>

Проверьте блог Фила Хака здесь по этой проблеме: Загрузкафайл (или файлы) с ASP.NET MVC

1 голос
/ 10 января 2012

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

action="/files/upload/uniqueID"

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...