var list=[];//数组 list[0]=1001; list[1]=1002; list[1]=1003; var json_data = { selected: list}; $.ajax({ url: '/xk/select', type: 'POST', data: json_data, success: function (j) { }, error: function () { } });
上述请求发出后,jquery会把json_data序列化为id=1&selected[]=1001&selected[]=1002&selected[]=1003的形式前端
假如mvc的action以下,seleted始终为nulljquery
public JsonResult select(int[] selected){}
MVC只会把下面两种请求转换为数组:
同名:arr=1001&arr=1002
索引:arr[0]=1001&arr[1]=1002ajax
所以,jquery.ajax不能采用数组方式传递参数,能够换成对象的方式json
var obj= {};//注意这里是对象,不是数组 obj[0] ="1001" ;//中括号属性设置法,等价于obj["0"]="1001"; obj[1] ="1002" ; obj[1] ="1003" ; //下面就能够发送请求了 var json_data = { selected: obj}; $.ajax({ url: '/xk/select', type: 'POST', data: json_data, success: function (j) { }, error: function () { } });
这种处理,请求数据变成了selected[0]=1001&selected[1]=1002&selected[2]=1003的形式,后端
另一种方式就是,ajax加traditional : true数组
var list= [];//注意这里是数组 list[0] ="1001" ;//中括号属性设置法,等价于student_ids["0"]="1001"; list[1] ="1002" ; list[1] ="1003" ; //下面就能够发送请求了 var json_data = { 'selected': list}; $.ajax({ url: '/xk/select', type: 'POST', data: json_data, traditional : true,//注意这里 success: function (j) { }, error: function () { } });
经过这种方式,请求变成了selected=1001&selected=1002&selected=1003的形式mvc
public JsonResult Select(int[] selected){}就能够正常接收数组selected了
以上是简单数组绑定,下面考虑复杂对象数组绑定
var books = [];//或者var books = {}
books[0] = { book_name: “1”, book_version: "1","book_publication":"1","book_author":"1"};
books[1] = { book_name: “2”, book_version: "2","book_publication":"2","book_author":"2"};
books[2] = { book_name: “3”, book_version: "3","book_publication":"3","book_author":"3"}; url
$.ajax({
url: '/Book/AddBooks',
type: 'POST',
data: {book:books},
success: function (j) {
},
error: function () {
}
});spa
截获的请求发现对象的属性,都自动加了中括号,致使mvc没法绑定到模型上!!!code
控制器以下:
public JsonResult AddBooks(BookInfo[] books){}
以上两种方式都没法将参数正确绑定到BookInfo[] books数组对象模型
只有这样的数据,才能正确绑定到模型上
book[0].book_name
book[0].book_publication
book[1].book_name
book[1].book_publication
因此前端要对js序列化作个处理或者后端自定义模型绑定