c# - Ajax post to ASP.net MVC controller - object properties are null -


i've got ajax post being constructed this:

var mydata = [     {         id: "a",         name: "name 1"     },     {         id: "b",         name: "name 2"     } ];  $.ajax({     type: 'post',     url: '/myurl/myaction',     data: { items: mydata },     datatype: 'json',     error: function (err) {         alert("error - " + err);     } }); 

and mvc controller:

[httppost] public jsonresult myaction(myclass[] items) {  } 

myclass simple representation of data:

public class myclass {     public string name {get; set; }     public string id {get; set; } } 

when javascript makes post request, controller action indeed receive 2 items, properties (id, name) in these items null.

checking request in fiddler, body looks this:

name                 | value items[0][name]       | name 1 items[0][id]         | items[1][name]       | name 2 items[1][id]         | b 

have missed something?

have missed something?

yes, take @ following article understand correct wire format default model binder expects binding collections. in other words, work, instead of:

items[0][name]       | name 1 items[0][id]         | items[1][name]       | name 2 items[1][id]         | b 

your payload should have looked this:

items[0].name       | name 1 items[0].id         | items[1].name       | name 2 items[1].id         | b 

unfortunately jquery can quite frustrating achieve payload. reason recommend use json payload if want send complex objects/arrays server ajax:

$.ajax({     type: 'post',     url: '/myurl/myaction',     data: json.stringify({ items: mydata }),     contenttype: 'application/json',     error: function (err) {         alert("error - " + err);     } }); 

things notice:

  • data: json.stringify({ items: mydata }) instead of data: { items: mydata }
  • added contenttype: 'application/json'
  • gotten rid of datatype: 'json'

now payload looks this:

{"items":[{"id":"a","name":"name 1"},{"id":"b","name":"name 2"}]} 

Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -