mvc数组绑定-jquery ajax

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始终为null

public JsonResult select(int[] selected){}

MVC只会把下面两种请求转换为数组:
同名:arr=1001&arr=1002
索引:arr[0]=1001&arr[1]=1002

因此,jquery.ajax不能采用数组方式传递参数,可以换成对象的方式

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的形式

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

$.ajax({
url: '/Book/AddBooks',
type: 'POST',
data: {book:books},
success: function (j) {
},
error: function () {
}
});

截获的请求发现对象的属性,都自动加了中括号,导致mvc无法绑定到模型上!!!

控制器如下:

public JsonResult AddBooks(BookInfo[] books){}

以上两种方式都无法将参数正确绑定到BookInfo[] books数组对象模型

只有这样的数据,才能正确绑定到模型上

book[0].book_name

book[0].book_publication

book[1].book_name

book[1].book_publication

所以前端要对js序列化做个处理或者后端自定义模型绑定

 



转载于:https://www.cnblogs.com/imust2008/p/7924799.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值