Вопрос

У меня есть форма, которая связывает модель и загружаемый файл, используя связующее по умолчанию для 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)

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

Это было полезно?

Решение

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

Другие советы

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

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

Я сделал это сам, и я гарантирую, что это сработает.

Добавить 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);
        }

У МЕНЯ ЭТО РАБОТАЕТ

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top