passing array from javascript to controller MVC 4
Solution 1
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)
{
}
Solution 2
the Ajax parameter
traditional : true
will do the trick.
Solution 3
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"); }
});
laitha0
Updated on July 18, 2022Comments
-
laitha0 almost 2 years
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.
-
laitha0 almost 11 yearsthis works! I did not know that I need a model for it. Thanks
-
Anders Lindén almost 11 yearsWell, need and need, you will get the opportunity to put words on the items, they are after all operations :)
-
Anders Lindén almost 11 yearsIn the json version, you keep the call to JSON.Stringify, and dataType: "json" and have an action that takes a string as parameter, public void HandleOperations(string operations), then you call var operationArr = JavaScriptSerializer.Deserialize<Operation>(operations);, you need to add a reference to System.Web.Extensions to your project
-
Sakthivel over 10 yearsyou actually dont need a model, using traditional:true will do it in ajax post.
-
radbyx over 10 yearsWhat do you mean? Where should I write traditional??
-
puddinman13 over 10 years$.ajax({ type: "POST", url: "HomePage/HandleOperations", data: {operations: operationCollection}, traditional: true, success: function (data) { alert("SUCCESS"); } });