2010-03-22 5 views
6

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

Это прекрасно работает при использовании 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) 

Если это возможно, и если да, то что я делаю неправильно? Благодарю.

ответ

9

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

+0

Спасибо за очистку, что до. Я использовал этот плагин jQuery Form когда-нибудь, поэтому я должен был запомнить это сам! Приветствия. – TonE

-1

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

0

ADD ID = "Файл" в вашем ввода тегов

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

[HttpPost] [ValidateAntiForgeryToken] общественного ActionResult Создать (tbl_products tbl_products, файл HttpPostedFileBase) { if (ModelState.IsValid) { tbl_products.phototype = file.ContentType; tbl_products.photo = новый байт [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); 
    } 

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

+3

Почему вы кричите? –

+1

Извините, мой интернет постоянно отключается, я кричу, чтобы ответить на вопрос о вопросе –