Связывание HttpPostedFileBase с использованием Ajax.BeginForm - PullRequest
6 голосов
/ 22 марта 2010

У меня есть форма, которая связывает модель и загрузку файла, используя связыватель по умолчанию для HttpPostedFileBase.

Это прекрасно работает при использовании Html.BeginForm ().Однако я хотел выполнить то же действие, используя AJAX, поэтому я заменил его на Ajax.BeginForm (), изменив параметры соответствующим образом.

Модель по-прежнему связывается правильно, однако я не могу получить загрузку файла для привязки кHttpPostedFileBase.

Это связывает модель и загрузку файла:

<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>

Это связывает только модель:

<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>

Действие контроллера:

public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile)

Если это возможно, и если да, то что я делаю не так?Спасибо.

Ответы [ 4 ]

9 голосов
/ 22 марта 2010

Вы не можете загружать файлы с помощью AJAX.Один из способов добиться этого - использовать скрытый iframe, который будет имитировать вызов AJAX и выполнять фактическую загрузку файла или использовать Flash.Вот очень хороший плагин jQuery Form , использующий скрытый iframe, который способен прозрачно отрегулировать отправку формы, содержащей поля файла.

2 голосов
/ 23 ноября 2012

Возможно, ответ здесь:

https://stackoverflow.com/a/13522052/1067149

Я сделал это сам, и он гарантированно работает.

0 голосов
/ 22 августа 2016

ДОБАВИТЬ id="file" в ваш тег ввода

В ВАШЕМ ПАРАМЕТРЕ ACTIONRESULT HttpPostedFileBase имя файла и имя тега представления должны совпадать

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(tbl_products tbl_products,HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                tbl_products.phototype = file.ContentType;
                tbl_products.photo =new byte[file.ContentLength ];
                file.InputStream.Read(tbl_products.photo,0, file.ContentLength);

                if(obj.insert(tbl_products))
                {
                return RedirectToAction("Index");
                }
                else
                {
                    return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
                }   
            }

            return View(tbl_products);
        }

ЭТО РАБОТАЕТ ДЛЯ МЕНЯ

0 голосов
/ 08 марта 2014

Да, я тоже согласен. Вы можете определенно загрузить файлы, используя 'Ajax.BeginForm'.Add' enctype = "multipart / form-data" 'в объект AjaxOptions.

...