javascript - pass array of numbers from ajax to controller - Stack Overflow

admin2025-04-18  0

I know this is a popular topic and I've tried all of the solutions I could find already out there to no avail. I've used all the solutions included for this questions: Pass a List from javascript to controller. I've simplified my test to ridiculously simple. I get into the controller but my controller input param is {int[0]}. I confirmed my array data looks good in the JavaScript and ajax call.

Can anyone please tell me what I am missing?

JavaScript Code

var selectedIds = [];
selectedIds.push(565);
selectedIds.push(573);
selectedIds.push(571);
// selectedIds = [565, 573, 571]

$.ajax({
    type: "POST",
    traditional: true,
    dataType: "json",
    data: { "ids": JSON.stringify(selectedIds) },
    //data: { "ids": selectedIds},
    //data: { ids: selectedIds},
    url: "api/services/getbuildingsbyid",
    success: function (result) {
        return result;
    }
});

Controller Code

[HttpPost]
public bool GetBuildingsById(int[] ids)
{
    var lookAtIds = ids;     // {int[0]}
    return true;
}

I know this is a popular topic and I've tried all of the solutions I could find already out there to no avail. I've used all the solutions included for this questions: Pass a List from javascript to controller. I've simplified my test to ridiculously simple. I get into the controller but my controller input param is {int[0]}. I confirmed my array data looks good in the JavaScript and ajax call.

Can anyone please tell me what I am missing?

JavaScript Code

var selectedIds = [];
selectedIds.push(565);
selectedIds.push(573);
selectedIds.push(571);
// selectedIds = [565, 573, 571]

$.ajax({
    type: "POST",
    traditional: true,
    dataType: "json",
    data: { "ids": JSON.stringify(selectedIds) },
    //data: { "ids": selectedIds},
    //data: { ids: selectedIds},
    url: "api/services/getbuildingsbyid",
    success: function (result) {
        return result;
    }
});

Controller Code

[HttpPost]
public bool GetBuildingsById(int[] ids)
{
    var lookAtIds = ids;     // {int[0]}
    return true;
}
Share asked Jul 21, 2017 at 22:15 PatriciaPatricia 5,11714 gold badges79 silver badges161 bronze badges 2
  • 1 try setting the data to { "ids": selectedIds } otherwise you're sending a string and not an int[] ex { "ids": "[565, 573, 571]"} – Enfyve Commented Jul 21, 2017 at 22:24
  • 2 Alternatively (to @Enfyve ment/answer), it needs to be data: JSON.stringify({ ids: selectedIds }), with contentType: 'application/json', (and delete traditional: true,) And if your passing an array of plex objects, then this format is necessary. – user3559349 Commented Jul 22, 2017 at 3:38
Add a ment  | 

2 Answers 2

Reset to default 3

By using JSON.stringify(selectedIds) you are turning an array of int into a string representation of said array.

The AJAX POST ends up like so:

{ "ids": "[565, 573, 571]" }

instead of

{ "ids": [565, 573, 571] }

If instead you just use the variable for the data, that should resolve the issue:

data: { "ids": selectedIds },

Edit-

Working backwards, by setting a variable to the data we can see the following:

var data = {"ids": JSON.stringify(selectedIds)}
typeof(data["ids"]) // string 
data["ids"][0]      // '['

data = {"ids": selectedIds}
typeof(data["ids"]) // object
data["ids"][0]      // 565

I use:

public ActionResult GetBuildingsById(String selectedIds)
{
    // this line convert the json to a list of your type, exactly what you want.
    IList<int> Ids = new JavaScriptSerializer().Deserialize<IList<int>>(selectedIds);     
    return Content(ids[0].ToString());
}

This will take you selectedIds = [565, 573, 571] and create the list of your type List

转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1744949791a276262.html

最新回复(0)