2012-09-24 23 views
15

Ich habe 8 Stunden oder so heute versucht, dies herauszufinden. Ich habe viele Lösungen gesehen, kann aber nicht die gleichen Ergebnisse erzielen. Ich habe eine Ahnung, es hat alles damit zu tun, relativ neu in ASP.Net zu sein.jQuery Post-Array - ASP.Net MVC 4

Hier ist die letzte Frage, die ich versuchte, ohne Glück nachzuahmen. https://stackoverflow.com/questions/10007722/post-array-as-json-to-mvc-controller#=

How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller?

Grund Rundown von Problem: Ich habe ein Array von json Objekten ich meinen Controller zu übergeben möchte. Wenn ich die Daten übergebe, werden zum Beispiel 3 Elemente angezeigt, aber ihre Werte werden nicht übergeben oder es wird nur angezeigt, dass nichts übergeben wurde. Firebug zeigt, dass es übergeben wurde, also nehme ich an, dass etwas nicht richtig eingerichtet ist und es ihm nicht erlaubt, diese Variable auf der C# -Seite richtig einzustellen.

Ich habe ein paar Dinge ausprobiert und krank Liste sie unter: Setup 1: Ich habe versucht, spöttisch, was ich bei der zweiten Verbindung gesehen:

$.ajax({ 
     type: 'Post', 
     cache: false, 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: { 'steps': ['1','2','3'] }, 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 

Controller 
[HttpPost] 
    public ActionResult UpdateStepPositions(string[] steps){ 

     var bresults = new { 
      Success = false, 
      Message = "Unable to update step positions." 
     }; 

     return Json(bresults); 
    } 

Ich konnte nicht einmal arbeiten, die einfachen Aufbau erhalten. . Es wird auf die Funktion und zeigt, dass es nichts passiert war ....

Setup 2:

list = new Array(); 
    list.push({ "step": 1, "position": 1 }); 
    list.push({ "step": 2, "position": 2 }); 
    list.push({ "step": 3, "position": 3 }); 

    $.ajax({ 
     type: 'Post', 
     cache: false, 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: JSON.stringify({ 'steps': list }), 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 

    Controller 
    [HttpPost] 
    public ActionResult UpdateStepPositions(List<UpdatedSteps> steps){ 
     var bresults = new { 
      Success = false, 
      Message = "Unable to update step positions." 
     }; 

     return Json(bresults); 
    } 

    Class 
    public class UpdatedSteps { 
    public string Step { get; set; } 
    public string Position { get; set; } 
} 

Kann jemand etwas Licht auf w leuchten Hat ich vermisst oder in die richtige Richtung weisen? Hoffentlich ist es etwas einfaches und nur ein Neuling Fehler!

+2

wenn es nicht unbedingt nötig, sollten Sie nicht verwenden 'async: false' in einem Ajax Anruf. AJAX sollte asynchron sein. Wenn Sie dies deaktivieren, kann der Browser während des Ajax-Anrufs nicht mehr reagieren. – MrOBrian

Antwort

38

MVC erkennt, welche Art von Daten es von contentType erhält. Hier arbeitet Beispiel:

$(function() { 
    $.ajax({ 
     type: 'Post', 
     dataType: 'json', 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: JSON.stringify({ steps: ['1', '2', '3'] }), 
     contentType: 'application/json; charset=utf-8', 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 
}); 

Jetzt ist alles ok mit Anfrage:

Content-Type:  application/json; charset=utf-8 
X-Requested-With: XMLHttpRequest 

und Antwort:

Content-Type:  application/json; charset=utf-8 
+0

Ich werde das versuchen und melden. – Silent

+0

Ok, ich habe diesen Code kopiert und eingefügt und hier ist, was ich in der Steuerung bekommen habe, das gleiche Problem, mit dem ich den ganzen Tag gekämpft habe! steps = null – Silent

+0

@Austin Reynolds Sorry, versuchen Sie eine neue Lösung. – webdeveloper