2016年5月23日 星期一

C# ASP.net MVC 前端javascript傳遞到後端Controller 二維陣列傳遞方法


原始程式碼如下:

 var MaxGroup = 5;//群組數量

    var obj = [[]];   //===========================錯誤位置
    var tempGroupName = [];
    for (var i = 1; i < MaxGroup + 1; i++)
    {
        var tempStateList = [];
        //get checkbox
        for (var j = 1 ; j < 16; j++) {
            tempStateList.push($("#autokind_" + i + "_" + j).is(":checked"));
        }
        obj.push(tempStateList)
        tempGroupName.push($("#autokind_name_"+i).val());
    }

    var StoragePlaceParam = {
        'TableName': Param.TableName, //--使用者查詢的TableName
        'Date_Start': Param.Date_Start,
        'Date_End': Param.Date_End,
        'Combination': obj,
        'GroupName': tempGroupName,
        'GroupCount': 5
    };


    //------我們家的網址
    var root = "http://" + location.host;
    if (location.host.indexOf("localhost") == -1) {
        root = "http://" + location.host + "/" + location.pathname.split('/')[1];
    }

    $.ajax({
        type: 'POST',
        url: root + "/api/SingleStockApi/GetSingleStockExtentionKindChart",
        data: StoragePlaceParam,  //------------------------參數丟入
        success: function (data) {
 
        }
    });


以上透過Ajax 傳遞到後端後發生Combination 為null
在後端的Combination 型別為 List<List<bool>> 理論上應該要有值,後來發現是因為
var obj = [[]]; 不可以這樣寫 應該 寫成
var obj = [];

var obj =[[]]  實際上為 array  = [[null]]
在傳遞到後端時因為判斷到null 所以List<List<bool>> 會直接視為全為null
如果定義成obj =[] 實際上為 array = []


//=====================

沒有留言:

張貼留言