2013-05-19 38 views
1

我的參數KontrolkaSamTekstLista獲得空數據控制器的ActionResult KontrolkaSubmit(),但所有派的行動AJAX看起來不錯。MVC 3的發送級別JSON

using System.Collections.Generic; 

namespace Modul_Stypendia.Kontrolki 
{ 
    public class KontrolkaSamTekst 
    { 
     public int Id { get; set; } 
     public int Kolejnosc { get; set; } 
     public string Tekst { get; set; } 
     public int Wypelnia { get; set; } 
     public List<string> Przyklad { get; set; } 

    } 
} 

這裏列表爲空重要

[HttpPost] 
     public ActionResult KontrolkaSubmit(List<KontrolkaSamTekst> KontrolkaSamTekstLista) 
     { 
      System.Threading.Thread.Sleep(2000); 


      return Json(new { msg = "Successfully added " + KontrolkaSamTekstLista[0].Tekst }); 
     } 

阿賈克斯

$("#waznyTest").click(function() { 

     var KontrolkaSamTekst = { 
      Id: idDane, 
      Kolejnosc: kolejnoscDane, 
      Tekst: tekstDane, 
      Wypelnia: wypelniaDane, 
      Przyklad: przykladDane 
     } 

     KontrolkaSamTekstLista = []; 
     KontrolkaSamTekstLista.push(KontrolkaSamTekst); 
     KontrolkaSamTekstLista.push(KontrolkaSamTekst); 
     KontrolkaSamTekstLista.push(KontrolkaSamTekst); 

     $.ajax({ 
     url: '@Url.Action("KontrolkaSubmit", "styStypendia")', 
     dataType: 'json', 
     data: { 
      KontrolkaSamTekstLista: KontrolkaSamTekstLista 
     }, 
     type: 'post', 
     traditional: true, 
     async: false, 
     success: function (data) { 
      $('#target').html(data.msg); 
     } 
    }); 

    }); 

發送的數據看起來不錯

enter image description here

發送的數據

enter image description here

正確答案

$.ajax({ 
      url: '/styStypendia/KontrolkaSubmit', 
      type: 'POST', 
      async: false, 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify(KontrolkaSamTekstLista) 
     }); 

最好的例子link

回答

3

您需要字符串化數據,而不是傳遞一個對象,但直接陣列:

$.ajax({ 
     url: '@Url.Action("KontrolkaSubmit", "styStypendia")', 
     contentType: "application/json; charset=utf-8", 
     data: JSON.stringify(KontrolkaSamTekstLista), 
     type: 'post', 
     async: false, 
     success: function (data) { 
      $('#target').html(data.msg); 
     } 
+0

我檢查這個,但不'噸幫助 –

+0

你能告訴我什麼是通過網絡發送?另外如果你使用IE7,那麼你需要一個庫來使用JSON.stringify。否則這應該工作 – Kenneth

+0

你需要我在這裏發送的信息Przyklad:Array [2]? –

2

你的AJAX方法應該是這樣的

$("#waznyTest").click(function() { 

    var KontrolkaSamTekst = { 
     Id: idDane, 
     Kolejnosc: kolejnoscDane, 
     Tekst: tekstDane, 
     Wypelnia: wypelniaDane, 
     Przyklad: przykladDane 
    } 

    KontrolkaSamTekstListaC = []; 
    KontrolkaSamTekstListaC.push(KontrolkaSamTekst); 
    KontrolkaSamTekstListaC.push(KontrolkaSamTekst); 
    KontrolkaSamTekstListaC.push(KontrolkaSamTekst); 

    $.ajax({ 
    url: '@Url.Action("KontrolkaSubmit", "styStypendia")', 
    dataType: 'json', 
    data: JSON.stringify(KontrolkaSamTekstLista), // CHANGED 
    type: 'post', 
    traditional: true, 
    async: false, 
    success: function (data) { 
     $('#target').html(data.msg); 
    } 
}); 

}); 
+0

OOPS,我沒有刷新頁面以查看Kenneth的答案。這可以被忽略。 – Saravanan