I am using razor and I'm having a hard time passing an array to a controller. the array contains objects that I made and I am trying to do this:
$.ajax({
type: "POST",
url: "HomePage/HandleOperations",
data: JSON.stringify(operationCollection),
success: function (data) { alert("SUCESS");},
dataType: "json",
contentType: "application/json"
});
and my controller is:
public void HandleOperations(List<string> operationCollection)
{
}
I am not required to use ajax but I am not sure how else it could be done. In the controller it shows that the "operationCollection" contains elements but they are all null.
Client side:
$.ajax({
type: "POST",
url: "HomePage/HandleOperations",
data: {operations: operationCollection},
success: function (data) { alert("SUCCESS"); }
});
and declare a class server side like this:
public class Operation
{
public int Index;
public string Source;
public string Target;
public int AddOrDel;
}
then you can have this action:
public void HandleOperations(Operation[] operations)
{
}
Usage of the traditional: true parameter for an ajax call:
To help radbyx, using the "traditional: true" property of an ajax call, like the following, will tell ajax to use the traditional form of serialization. More details: http://api.jquery.com/jQuery.param/
or What is "traditional style of param serialization' in JQuery.
$.ajax({
type: "POST",
url: "HomePage/HandleOperations",
data: {operations: operationCollection},
traditional: true,
success: function (data) { alert("SUCCESS"); }
});
Add "traditional:true" parameter in your ajax.
Example:
var parentValueToPush=new Array();
$('[name=SelectedUsers]:checked').each(function () {
parentValueToPush.push($(this).val());
temp.push($(this).val());
});
$.ajax({
url: //URL,
type: 'get',
traditional: true,
dataType: 'html',
cache: false,
data: { SelectedUsers: parentValueToPush},
success: function (data) {
//Result
}
});