2016-05-07 12 views
0

Ich habe Problem mit dem Objekt sendet enthalten Array mit einem ControllerSenden Objekt an einen Controller in asp.net MVC Ajax

das ist mein js Code

var messageId = 0; 
    function DraftMessage() 
    { 
     var to = []; 
     var i = 0; 
     $('#to option:selected').each(function (index, element) { 
      to[i++] = $(element).val(); 
     }); 
     console.log(to); 
     $.ajax({ 
      type: "POST", 
      url: "@Url.Action("DraftMessage", "Activities")", 
      datatype: "json", 
      traditional: true, 
      async: false, 
      data: { "id": messageId, "To": to, "Title": $("#title").val(), "Project": $("#project").val(), "AreaId": $("#areaId").val(), "Body": $("#messageBody").val() }, 
       beforeSend: function() { } 
     }).done(function (Id) { 
      console.log(Id); 
      messageId = Id; 
     }); 
    } 
    $("input, select, textarea").change(function() { DraftMessage(); }); 
    var contents = $('.note-editable').html(); 
    $(".compose-message").on("blur", ".note-editable", function() { 
     if (contents != $(this).html()) { 
      DraftMessage(); 
      contents = $(this).html(); 
     } 
    }); 

und dies ist meine Controller Seite

mein Problem ist, dass die AJAX-Anfrage immer das Array als Null senden, ich weiß nicht, was falsch ist, konnte mir jemand helfen, dieses Problem zu lösen.

+1

wo fügen Sie die Datei Eingangsdatenfeld auf die Daten Sie können Ihre gesamte Form von so etwas wie dies tun serialisiert? Werfen Sie einen Blick auf diese http://stackoverflow.com/questions/34603739/jquery-ajax-form-submit-that-contains-files/34604232#34604232 – Shyju

Antwort

0

können Sie Ihre Anfrage ändern und

dataType: "json", 
contentType: "application/json;charset=utf-8", 

Dies sollte funktionieren verwenden. Lass es mich wissen, bitte.

0

Versuchen Sie dies. Schieben Sie Ihr Objekt auf Array und senden Sie es als Json.

array.push({yourobject datas here}) 
    $.ajax({ 
     type: "POST", 
     url: '/DraftMessage/Activities', 
     contentType: 'application/json', 
     data: JSON.stringify(array), 
     success: function (d) { 
      .. 
     }, 
     error: function (xhr, textStatus, errorThrown) { 

      console.log(errorThrown); 
     } 
    }); 

Konvertieren Sie den Rückgabetyp Ihrer Steuerungsfunktion in JSonResult. Hoffnung hilft.

0

Möchten Sie Datei mit Ajax hochladen? !!

die normale Verwendung von Formular-Ereignis nicht die Ajax.BeginForm dann in Form einreichen Code wie folgt schreiben:

$('#Form').submit(function() { 
     var xhr = new XMLHttpRequest(); 
     var fd = new FormData(); 

     var file = $('#Image').val(); 
     if (file) { 
      var fname = $('#Image')[0].files[0].name; 

      if (CheckFile(file)) { 
       var uploadFile = document.getElementById('Image').files[0]; 
       var myArray = []; 
       myArray.push(uploadFile); 
       if (myArray.length > 0) { 
        for (var i = 0; i < myArray.length; i = i + 1) { 
         fd.append("File1", myArray[i]); 
        } 
       } 
      } 
      else { 
       return false; 
      } 
     } 


     fd.append("ID", messageId); 
     fd.append("Title", $('#Title').val()); 
     fd.append("Project", $('#Project').val()); 
     fd.append("AreaId", $('#AreaId').val()); 
     fd.append("Body", $('#messageBody').val()); 

     var form = $('#Form'); 
     var token = $('input[name="__RequestVerificationToken"]', form).val(); 
     fd.append("__RequestVerificationToken", token); 
     xhr.open("POST", "/ControllerName/Action/", true); 
     xhr.send(fd); 

     xhr.addEventListener("load", function (event) { 
     if (event.target.response != "OK") { 
      OnFail(event.target.response); 
     } 
     else { 
      OnSuccess(event); 
     } 
     }, false); 
     return false; 
     }) 

Server-Seite in der Steuerung:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult actionName(Model pModel){ 

    HttpPostedFileBase File = Request.Files["File1"]; 
    if (File != null && File.ContentLength != 0){ 
       //do what you want 
     return Content("OK"); 
    } 
    else{ 
    Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest; 
       return Content("Error Messages",  System.Net.Mime.MediaTypeNames.Text.Plain); 
    } 

    } 
0

Sie ausprobieren können anderer Ansatz.

var formdata = $("#frmEmailInfo").serialize(); 

und dann per Post an den Controller::

$.ajax(
      { 
       type: "POST", 
       data: formdata, 
       dataType: 'json',... 
Verwandte Themen