Jquery – MVC 3 AJAX Post, List filled with Objects, but Objects Properties are Empty

ajaxasp.net-mvc-3jquerymodel-binding

I have the following problem:

On a Button-Click I POST some data to the server.
My controller Action looks like this:

public ActionResult Accept(List<MyViewModel> entries)
{
    //here entries HAS 2 MyViewModel-Instances in it.
    //The entries are not null, but the values of the instances are!
    //entries[0].ParamA is null
}

Where the MyViewModel looks like this:

public class MyViewModel
{
    public string ParamA { get; set; }
    public string ParamB { get; set; }
}

And the AJAX-Call is the follwing:

var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, { ParamA: "C", ParamB: "D" }] };

$.ajax({
    type: 'POST',
    url: url,
    cache: false,
    data: myEntries,
    dataType: 'text' });

What i already tried to do:

  • Changed dataType to 'json'
  • used: traditional: true
  • tried var myEntries = JSON.stringify(…);
  • tried var myEntries = { entries : [JSON.stringify({ … }), JSON.stringify({ … })] };
  • same as above, but with jQuery.param(…, true);
  • Use of IEnumerable or MyViewModel[] instead of list.
  • ANY combination of the above

What am I doing wrong here?

Thank you very, very much in advance for helping me!

EDIT

My (Razor)View is not interesting at this moment as it has nothing to do with anything. I am NOT using any of the HTML.TextBoxFor (or similiar) Methods to fill the myEntries-Variable. It is actually filled dynamically (because there are many many conditions).
For the sake of the question (and my own testing) i hard-coded the variable. 🙂

Best Answer

With your answer and the use of JSON.stringify method it works for me

var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, 
                            { ParamA: "C", ParamB: "D" }] };

$.ajax({
        type: 'POST',
        url: '/{controller}/{action}',
        cache: false,
        data: JSON.stringify(myEntries),
        dataType: 'json', 
        contentType: 'application/json; charset=utf-8'
    });
Related Topic