Rafał Developer
Rafał Developer

Reputation: 2055

MVC 3 sending class JSON

My parameter KontrolkaSamTekstLista get null data to controller ActionResult KontrolkaSubmit() but all send action to ajax looks okay.

Class

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

    }
}

here list is empty IMPORTANT

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


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

Ajax

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

    });

sent data looks okay

enter image description here

sent data

enter image description here

CORRECT ANSWER

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

the best example link

Upvotes: 1

Views: 697

Answers (2)

Kenneth
Kenneth

Reputation: 28737

You need to stringify your data, and not pass in an object, but the array directly:

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

Upvotes: 3

Saravanan
Saravanan

Reputation: 7854

Your AJAX method should look like this

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

});

Upvotes: 2

Related Questions