2016-03-30 15 views
1

ich auf einer MVC-project.I bin arbeiten, haben ein Formular unten wie:Senden HttpPostedFileBase Feld mit JQuery Ajax form.serialize() in 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> 

Meine Viewmodel:

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

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

} 

Meine 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 
      } 
     }); 
    }) 

Mein Controller Aktion ist wie folgt:

Vor dieser Situation, ich meine in anderen Projekten, meistens hatte ich etwa 3 bis 8 Feld einschließlich Bilddatei ein paar andere Arten und ich füge sie eins nach dem anderen an FormData (wegen dieser Bilddatei) dann senden sie durch Ajax Anfrage und es war egal für mich, aber jetzt habe ich etwa 22 Felder und es ist ein wenig, obwohl dies zu tun.so entschied ich, das Formular zu serialisieren und es durch Ajax Anfrage senden und es funktioniert gut Form aller Felder außer Bild was ich mache den Typ in ViewModel. Irgendeine Idee, wie man dieses Feld mit Formular unter Verwendung data: form.serialize() sendet?

Ihre Hilfe schätzen :)

Update: lassen Sie mich klar, irgendwann ist:

1-I nicht FormData durch Ajax senden möchten, und ich will form.serialize() mit senden.

2 - Ich möchte keine fertigen Datei-Plugins verwenden.

3-Ich meine nicht nur ein Bildfeld, ich meine die ganze Form mit 23 Feldern.

+0

Mögliche Duplikate von [Wie kann ich Dateien asynchron hochladen?] (Http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchron) – pwas

+1

Bitte lesen Sie die ganze Frage. Wie Sie vorausgesetzt, sie verwendet FormData, um durch Ajax zu senden, und ich möchte mit form.serialize() senden, schlug sie einige fertige Plugins-Dateien für und wollen, Sie zeigten nur ein Bildfeld und bedeuten Ganzes das Formular. –

+1

Siehe [diese Antwort] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) - es ist einfach 'var formdata = new FormData ($ ('form'). get (0));' um Ihre ganze Form einschließlich Dateieingaben zu serialisieren - Sie müssen sie nicht einzeln anhängen. –

Antwort

0

Sie nicht post/laden Sie eine Datei jQuery Ajax verwenden, es sei denn, Sie FormData oder einige Plugins verwenden werden, die iFrame Implementierungen intern verwenden.