Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ajax model binding of a complex type

I am trying to do something along the lines of the following where I have a Controller with an method similar to:

public ActionResult Insert(Author author) {
  //do something...
}

Where the Author type looks like:

public class Author {
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public Book[] Books { get; set; }

  public Author() {
    Books = new Book[0];
  }
}

public class Book {
  public string Title { get; set; }
  public int NumberOfPages { get; set; }
}

From a page I want to submit data using JQuery and Ajax something like

function addAuthor() {
  var auth = {
    'FirstName': 'Roald',
    'LastName': 'Dahl',
    'Books': [
      {
        'Title': 'Charlie and the Chocolate Factory',
        'NumberOfPages': 264
      },
      {
        'Title': 'The Twits',
        'NumberOfPages': 316
      }
    ]
  };

  $.ajax({
    type: "GET",
    url: "/Insert",
    data: auth
  });

}

MVC binds the Author object (FirstName and LastName are set) but doesn't bind the Books property. Why is that and how can I submit an object containing an Array (or a Collection) as a property through AJAX?

like image 555
David Glenn Avatar asked Jan 19 '10 10:01

David Glenn


1 Answers

DaveG,

Wouldn't you need to use a POST method rather than the GET ??

i.e.

  $.ajax({
    type: "POST",
    url: "/Insert",
    data: auth
  });

i'm sure there may be other issues as well re json formatting but this is my initial thoights on 1st glance.

like image 118
jim tollan Avatar answered Oct 23 '22 02:10

jim tollan