ASP.NET MVC Форма Ajax: Правильно ли задан тип enctype? Почему файл не загружается? - PullRequest
1 голос
/ 17 сентября 2009

В случае, если у пользователя не активирован Javascript, чтобы нарисовать форму, я начинаю так:

<% using (Html.BeginForm("Create", "Language", FormMethod.Post,
    new {enctype="multipart/form-data"}))
{ %>

Если у пользователя активирован Javascript, используется следующий код:

<% using (Ajax.BeginForm("Create", "Language",
    new AjaxOptions { UpdateTargetId = "CommonArea" },
    new { enctype = "multipart/form-data" }))
{ %>

Проблема заключается в следующем:

В первом случае я могу загрузить файл, используя следующую инструкцию на бизнес-уровне:

// Get the uploaded file
HttpPostedFile Flag = HttpContext.Current.Request.Files["Flag"];

Во втором случае эта инструкция не работает. Как я знаю, загрузить этот файл с помощью Ajax.BeginForm? Код правильный? Кто-нибудь еще может посоветовать использовать плагин jQuery для загрузки файла перед отправкой формы?

Спасибо

Ответы [ 2 ]

3 голосов
/ 17 сентября 2009

Вы не можете загрузить файл, используя только AJAX. Многие (большинство?) Асинхронные загрузчики используют динамически создаваемый скрытый iframe, содержащий форму, которая обычно отправляется обратно на сервер. Я бы посоветовал просмотреть репозиторий плагинов jQuery для « ajax upload » и посмотреть, сможете ли вы найти плагин, который будет работать для вас, который будет выполнять загрузку, используя комбинацию javascript и iframe.

ПРИМЕЧАНИЕ. В настоящее время Firefox и Chrome поддерживают XMLHttpRequest2, который разрешает загрузку через запрос AJAX. Можно было бы ожидать, что поддержка этого станет универсальной в некоторый момент, и истинная асинхронная загрузка будет возможна во всех браузерах. Браузеры, поддерживающие FormData, также могут загружать файлы с использованием этого интерфейса.

...