2016-03-30 3 views
1

Я работаю над MVC project.I имеют форму, как показано ниже:Отправка HttpPostedFileBase поле с помощью JQuery AJAX form.serialize() в MVC

<div id="horizontal-form"> 
      @using (Html.BeginForm("Send", "Ticket", FormMethod.Post, new 
      { 
       @class = "form-horizontal", 
       role = "form", 
       id = "form_send_ticket", 
       enctype = "multipart/form-data" 
      })) 
      { 

       @**** I have about 20 filed's of other types here ****@ 
       ...... 

       @**** Image file ****@ 
       @Html.TextBoxFor(x => x.Image, new { type = "file" }) 


       <div> 
        <button type="button" class="btn btn-success" id="send_ticket">Insert</button> 
       </div> 
      } 

</div> 

Мой ViewModel:

public class SendViewModel 
{ 
    //I have about 20 filed's of other types here 
    ..... 

    //Image file 
    public HttpPostedFileBase Image { get; set; } 

} 

Мои JQuery Ajax:

$("#send_ticket").click(function() { 
     var form = $("#form_send_ticket"); 

     $.ajax({ 
      type: "POST", 
      url: '@Url.Action("Send", "Ticket")', 
      data: form.serialize(), 
      contentType: "multipart/form-data", 
      success: function (data) { 
       //do something 
      }, 
      error: function (e) { 
       //do something 
      } 
     }); 
    }) 

My Controller Действие выглядит так:

До этого я столкнулся, я имею в виду в других проектах, в основном у меня было примерно от 3 до 8 полей, включая графический файл, некоторые другие типы, и я добавляю их один за другим в FormData (из-за этого файла изображения), затем отправьте они через запрос ajax, и это было для меня неважно, но теперь у меня около 22 полей, и это немного, но для этого. Я решил сериализовать форму и отправить ее с помощью запроса ajax, и он работает в хорошей форме, все записано, кроме изображения который я делаю его типом HttpPostedFileBase в ViewModel. Любая идея, как отправить это поле в форме с помощью data: form.serialize()?

ценит вашу помощь :)

Update: позвольте мне прояснить некоторый Пункт:

1-я не хочу FormData отправить через AJAX, и я хочу, чтобы отправить с помощью form.serialize().

2-Не хотите использовать готовые плагины файлов.

3-я не имею в виду только одно поле изображения, я имею в виду всю форму с 23 полями.

+0

Возможный дубликат [Как загрузить файлы асинхронно?] (Http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously) – pwas

+1

Пожалуйста, прочитайте весь вопрос. Как и вы при условии, что они использовали FormData для отправки через ajax, и я хочу отправить с помощью form.serialize(), они предложили некоторые готовые файлы плагинов и захотят, они указали только одно поле изображения и означают всю форму. –

+1

См. [Этот ответ] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) - его просто «var formdata = new FormData ($ ('form'). get (0));' для сериализации всей формы, включая входные файлы, - вам не нужно добавлять их по одному. –

ответ

0

Вы не пост/загрузить файл с помощью JQuery Ajax, если вы не собираетесь использовать FormData или несколько плагинов, которые внутренне используют iFrame реализации.

Смежные вопросы