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始終爲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序列化作個處理或者後端自定義模型綁定

相關文章
相關標籤/搜索