2012-09-24 15 views
15

Spędziłem dzisiaj około 8 godzin próbując to zrozumieć. Przeglądałem wiele rozwiązań, ale nie mogę uzyskać takich samych wyników. Mam przeczucie, że ma to coś wspólnego z byciem względnie nowym w ASP.Net.jQuery post array - ASP.Net MVC 4

Oto najnowsze pytanie, które próbowałem naśladować bez powodzenia. 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?

Podstawowe Rundown problemu: Mam tablicę obiektów json chciałbym przejść do mojego kontrolera. Kiedy przekazuję dane, które pokazują, powiedzmy na przykład 3 elementy, ale ich wartości nie są przekazywane lub po prostu pokazuje, że nic nie zostało przekazane. Firebug pokazuje, że przekazał go, więc zakładam, że coś nie jest poprawnie ustawione i nie pozwala mu poprawnie ustawić tej zmiennej po stronie C#.

Próbowałem kilka rzeczy i źle ich lista poniżej: Konfiguracja 1: Próbowałem szyderczy co widziałem na drugim linku:

$.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); 
    } 

nie mogłem nawet dostać takie proste konfigurację roboczą. . To staje się funkcją i pokazuje nic nie przeszły ....

Konfiguracja 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; } 
} 

Czy ktoś może rzucić nieco światła na wag czapkę, której mi brakuje, czy wskazujesz we właściwym kierunku? Mam nadzieję, że jest to coś prostego i tylko błąd początkującego!

+2

chyba że jest to absolutnie konieczne, nie należy używać 'asynchroniczny: FALSE w sposób wywołanie ajax. AJAX ma być asynchroniczny, przez wyłączenie tego możesz spowodować, że przeglądarka przestanie reagować podczas wywołania ajax. – MrOBrian

Odpowiedz

38

MVC wykrywa typ danych odbieranych przez contentType. Przykładem tu pracuje:

$(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); 
     } 
    }); 
}); 

Teraz wszystko ok z prośbą:

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

i odpowiedź:

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

Spróbuję tego i złożę raport. – Silent

+0

OK Skopiowałem i wkleiłem ten kod, a oto co dostałem w kontrolerze, ten sam problem, z którym walczę przez większość dnia! steps = null – Silent

+0

@Austin Reynolds Przepraszam, wypróbuj nowe rozwiązanie. – webdeveloper